gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:44:43 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com