从 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# 中的任何地方使用。
我的问题是:
- 在 C++ 代码中,我应该将 inputList 设置为 NULL 吗?
- 如果我将它设置为NULL,我应该如何设置它才能避免出现错误?我应该使用
inputList=0
、inputList=NULL
还是 inputList=(int*)malloc(0)
?
- 如果我不设置,或者设置错误,会有什么后果?会不会出现一些很难诊断的bug?我担心的是,如果我没有正确设置它,某些机器可能 运行 代码正常,其他机器可能不会。当程序停止工作时,它会在很晚的某个时间点停止,导致我们很难诊断问题,例如
AccessViolationException
.
- 总而言之,如果我把它设置为
inputList=(int*)malloc(0)
,或者我根本不设置它,程序会不会在以后的某个时间在不同的地方崩溃,以一种非常不可预测和不一致的方式方式,取决于代码在哪台机器上 运行ning?
将指针分配给 (int*)malloc(0)
会导致不可预测的崩溃吗?我应该如何正确设置未使用的指针?
只需将其设置为 NULL
或者,如果您的编译器支持,则设置为 nullptr
。这清楚地表明它没有指向任何有用的东西。
所以 inputList=NULL
或 inputList=nullptr
。
显然,根本不设置它是最糟糕的做法。如果有任何代码使用它,它的行为将不可预测。
我不确定,为什么要这样做 inputList=(int*)malloc(0)
。
我有 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# 中的任何地方使用。
我的问题是:
- 在 C++ 代码中,我应该将 inputList 设置为 NULL 吗?
- 如果我将它设置为NULL,我应该如何设置它才能避免出现错误?我应该使用
inputList=0
、inputList=NULL
还是inputList=(int*)malloc(0)
? - 如果我不设置,或者设置错误,会有什么后果?会不会出现一些很难诊断的bug?我担心的是,如果我没有正确设置它,某些机器可能 运行 代码正常,其他机器可能不会。当程序停止工作时,它会在很晚的某个时间点停止,导致我们很难诊断问题,例如
AccessViolationException
. - 总而言之,如果我把它设置为
inputList=(int*)malloc(0)
,或者我根本不设置它,程序会不会在以后的某个时间在不同的地方崩溃,以一种非常不可预测和不一致的方式方式,取决于代码在哪台机器上 运行ning?
将指针分配给 (int*)malloc(0)
会导致不可预测的崩溃吗?我应该如何正确设置未使用的指针?
只需将其设置为 NULL
或者,如果您的编译器支持,则设置为 nullptr
。这清楚地表明它没有指向任何有用的东西。
所以 inputList=NULL
或 inputList=nullptr
。
显然,根本不设置它是最糟糕的做法。如果有任何代码使用它,它的行为将不可预测。
我不确定,为什么要这样做 inputList=(int*)malloc(0)
。