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

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

本文关键字:未使用 处理 指针 何最好 调用 C++      更新时间:2023-10-16

我在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++代码中,我应该将输入列表设置为 NULL 吗?
  2. 如果我将其设置为 NULL,我应该如何最好地设置它以避免错误?我应该使用inputList=0,还是inputList=NULL,还是inputList=(int*)malloc(0)
  3. 如果我
  4. 不设置它,或者如果我设置错误,后果是什么?会出现一些非常难以诊断的错误吗?我担心的是,如果我没有正确设置它,某些机器可能会运行代码,而其他机器可能无法运行。当程序停止工作时,它将在很久以后的某个点停止,从而导致我们很难诊断的问题,例如AccessViolationException.
  5. 总而言之,如果我将其设置为inputList=(int*)malloc(0),或者如果我根本不设置它,程序是否会在以后以非常不可预测和不一致的方式在不同的地方崩溃,具体取决于代码在哪台机器上运行?

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

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

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

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

我不确定,为什么有人想做inputList=(int*)malloc(0).