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

标签 c# c++ pointers interop access-violation

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

我的问题是:

  1. 在 C++ 代码中,我应该将 inputList 设置为 NULL 吗?
  2. 如果我将它设置为 NULL,我应该如何最好地设置它以避免错误?我应该使用 inputList=0inputList=NULL 还是 inputList=(int*)malloc(0)
  3. 如果我不设置,或者设置错误,会有什么后果?会不会出现一些很难诊断的bug?我担心的是,如果我没有正确设置它,一些机器可能会正常运行代码,而其他机器可能不会。当程序停止工作时,它会在很久以后的某个点停止,从而导致我们很难诊断问题,例如 AccessViolationException
  4. 总而言之,如果我将它设置为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/

相关文章:

c# - 转换带有千位分隔符的格式化十进制字符串

c# - 如何将四元数转换为角度?

c++ - 我可以解开 GCC 的 RTTI 名称吗?

c++ - 如何在单次迭代中使用 C++ Pgm 中的指针查找字符串段落中单词的出现次数?

c - struct c 中的多维数组

c++ - 从指向基类型的指针 vector ,返回派生类型的第一个元素,转换为派生类型

c# - 无法将 LINQ Query var 转换为 DataTable

c# - 使用 LINQ 修剪 List<string[]> 中所有字符串的最简单方法?

c++ - 为什么我的 C++ 算法总是为数字的最小值和最大值返回相同的值?

c++ - 在方程式中使用二维数组