好吧,我知道您通常如何声明一个指针:
void SomeFunction(array<float> ^managedArray)
{
pin_ptr<float> managedArrayPtr = &managedArray[0];
}
除非托管数组不包含任何元素,否则此方法工作正常。在这种情况下,它将引发IndexOutOfRangeException。
在C#中,您可以执行以下操作:
void SomeFunction(float[] managedArray)
{
fixed (float* managedArrayPtr = managedArray)
{
}
}
即使托管数组为空,也不进行内存访问并且可以工作。
我真的必须检查所有我使用指向托管数组的指针的元素的数量吗,还是C++/CLI像C#一样有办法做到这一点?
它应该使用ASM中的“lea”指令,该指令不进行内存访问。
任何帮助是极大的赞赏!
最佳答案
当数组为空时,尝试从数组中读取没有什么意义。只需检查一下:
void SomeFunction(array<float> ^managedArray)
{
if (managedArray->Length > 0) {
pin_ptr<float> managedArrayPtr = managedArray;
//etc...
}
}