从 C# 调用 C++ 时如何最好地处理未使用的指针?

How to best handle unused pointer when calling C++ from C#?

我有 C++ 代码,我将通过互操作机制从 C# 调用这些代码。

在我的 C++ 代码中,这是我的 class 结构

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# 中的任何地方使用。

我的问题是:

  1. 在 C++ 代码中,我应该将 inputList 设置为 NULL 吗?
  2. 如果我将它设置为NULL,我应该如何设置它才能避免出现错误?我应该使用 inputList=0inputList=NULL 还是 inputList=(int*)malloc(0)
  3. 如果我不设置,或者设置错误,会有什么后果?会不会出现一些很难诊断的bug?我担心的是,如果我没有正确设置它,某些机器可能 运行 代码正常,其他机器可能不会。当程序停止工作时,它会在很晚的某个时间点停止,导致我们很难诊断问题,例如 AccessViolationException.
  4. 总而言之,如果我把它设置为inputList=(int*)malloc(0),或者我根本不设置它,程序会不会在以后的某个时间在不同的地方崩溃,以一种非常不可预测和不一致的方式方式,取决于代码在哪台机器上 运行ning?

将指针分配给 (int*)malloc(0) 会导致不可预测的崩溃吗?我应该如何正确设置未使用的指针?

只需将其设置为 NULL 或者,如果您的编译器支持,则设置为 nullptr。这清楚地表明它没有指向任何有用的东西。

所以 inputList=NULLinputList=nullptr

显然,根本不设置它是最糟糕的做法。如果有任何代码使用它,它的行为将不可预测。

我不确定,为什么要这样做 inputList=(int*)malloc(0)