如何在调用C++;从C#? 我有C++代码,我将通过互操作机制从C语言调用。

如何在调用C++;从C#? 我有C++代码,我将通过互操作机制从C语言调用。,c#,c++,pointers,interop,access-violation,C#,C++,Pointers,Interop,Access Violation,我的C++代码中,这是我的类结构< /p> extern "C" struct __declspec(dllexport) LegList { SimpleList simple_List; int* inputList; }; 这是我的C#代码: 输入列表在C#中的任何地方都没有使用 我的问题是: 在C++代码中,我应该将输入列表设置为null吗? 如果我将它设置为NULL,我应该如何最好地设置它以避免bug?我应该使用inpu

<>我的C++代码中,这是我的类结构< /p>
extern "C" struct __declspec(dllexport) LegList
{
    SimpleList          simple_List;
    int*                inputList;
};
这是我的C#代码:

输入列表
在C#中的任何地方都没有使用

我的问题是:

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

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

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

    所以要么
    inputList=NULL
    要么
    inputList=nullptr

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


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

    为什么要投否决票?SO now的一个恼人之处是,人们只是在没有解释或任何改进建议的情况下否决了投票,尽管如此,这个问题仍然有效且明确。谢谢,这也是我的想法。但是,如果我将它设置为
    inputList=(int*)malloc(0)
    ,或者如果我根本没有设置它,程序会在以后以一种非常不可预测和不一致的方式在不同的地方崩溃,这取决于代码运行在哪台机器上?
    [StructLayout(LayoutKind.Sequential)]
    public struct LegList
    {
       SimpleList           simple_List;    
        public IntPtr inputList;
    
    }