【发布时间】:2013-12-11 11:11:46
【问题描述】:
请看下面的c#代码:
double* ptr;
fixed(double* vrt_ptr = &vertices[0])
{
fixed(int* tris_ptr = &tris[0])
{
ptr = compute(vrt_ptr, 5, (double*)tris_ptr, 5);
// compute() is a native C++ function
}
}
Debug.Log("Vertices Recieved: " + *ptr);
/* and so on */
我有来自 *ptr 的垃圾值。我怀疑compute 分配给ptr 的数组不会保留在固定块之外。是这样吗??还是因为其他问题?
【问题讨论】:
-
可能,
compute返回一个指向局部变量的指针,函数返回时销毁。但是不看函数就无法知道。 -
@MikeSeymour 本地变量的指针不会在方法返回后立即销毁。不是吗?
-
@SriramSakthivel:当程序离开其作用域时,局部变量将被销毁,任何指向它的指针都将指向垃圾。
-
@MikeSeymour 看来
compute是c++ 方法。我想这是relevant。我可能错了。有错请指正。 -
我认为在调用
compute之前分配它并交给它会更好。这样你可以摆脱虚假的ptr,如果你稍后释放内存会更清楚(为了防止内存泄漏)。
标签: c# c++ pointers unity3d native-code