我有 C++ 代码,我将通过互操作机制从 C# 调用这些代码。
在我的 C++ 代码中,这是我的类结构
extern "C" struct __declspec(dllexport) LegList
{
SimpleList simple_List;
int* inputList;
};
这是我的 C# 代码:
[StructLayout(LayoutKind.Sequential)]
public struct LegList
{
SimpleList simple_List;
public IntPtr inputList;
}
inputList
没有在 C# 中的任何地方使用。
我的问题是:
- 在 C++ 代码中,我应该将 inputList 设置为 NULL 吗?
- 如果我将它设置为 NULL,我应该如何最好地设置它以避免错误?我应该使用
inputList=0
、inputList=NULL
还是inputList=(int*)malloc(0)
? - 如果我不设置,或者设置错误,会有什么后果?会不会出现一些很难诊断的bug?我担心的是,如果我没有正确设置它,一些机器可能会正常运行代码,而其他机器可能不会。当程序停止工作时,它会在很久以后的某个点停止,从而导致我们很难诊断问题,例如
AccessViolationException
。 - 总而言之,如果我将它设置为
inputList=(int*)malloc(0)
,或者如果我根本不设置它,程序会在不同的地方崩溃吗?稍后,以一种非常不可预测和不一致的方式,取决于代码在哪台机器上运行?
将指针分配给 (int*)malloc(0)
会导致不可预测的崩溃吗?我应该如何正确设置未使用的指针?
最佳答案
只需将其设置为NULL
,或者,如果您的编译器支持,则设置为nullptr
。这清楚地表明它没有指向任何有用的东西。
所以 inputList=NULL
或 inputList=nullptr
。
显然,根本不设置它是最糟糕的做法。如果有任何代码使用它,它的行为将不可预测。
我不确定,为什么要这样做 inputList=(int*)malloc(0)
。
关于c# - 从 C# 调用 C++ 时如何最好地处理未使用的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29647688/