我有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;

}

在C#中的任何地方都没有使用inputList

我的问题是:
  • 在C++代码中,我应该将inputList设置为NULL吗?
  • 如果将其设置为NULL,如何最好地设置它以避免错误?我应该使用inputList=0还是inputList=NULLinputList=(int*)malloc(0)
  • 如果我没有设置它,或者设置不正确,将会有什么后果?会出现一些很难诊断的错误吗?我担心的是,如果我没有正确设置它,那么某些机器可能会很好地运行代码,而其他机器可能不会。而且,当程序停止运行时,它将在很长时间后停止,从而给我们带来了很难诊断的问题,例如AccessViolationException
  • 总而言之,如果我将其设置为inputList=(int*)malloc(0),或者如果我根本未设置,则程序稍后会以非常无法预测和不一致的方式在另一个位置崩溃,具体取决于代码是哪台计算机正在运行?

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

    最佳答案

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

    因此,inputList=NULLinputList=nullptr

    显然,根本不设置它是最糟糕的事情。如果有任何使用它的代码,它将无法预期地运行。

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

    关于c# - 从C#调用C++时如何最好地处理未使用的指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29647688/

    10-09 13:09