从 C# 调用C++时如何最好地处理未使用的指针?
How to best handle unused pointer when calling C++ from C#?
我在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# 中的任何位置都不使用。
我的问题是:
- 在C++代码中,我应该将输入列表设置为 NULL 吗?
- 如果我将其设置为 NULL,我应该如何最好地设置它以避免错误?我应该使用
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)
.
相关文章:
- 普通环路未使用gcc 4.8.5自动矢量化
- 在更改for循环的第三部分后,未使用for循环结果
- 使用typeid警告未使用的变量
- C++删除未使用的类属性会导致 std::logic_error
- 警告 C4552:">>":未使用表达式的结果
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 为什么我会收到警告,指出函数已使用但未定义,以及已定义但未使用?
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 可视化C++载体:未使用的容量
- GCC 中 __attribute__((未使用)) 和 __attribute((未使用)) 之间的区别
- 循环访问还包含未使用元素的字符串数组
- Q维德格特关闭事件(..)未使用 QProcess::terminate() 调用
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- G++ 编译器是否在未使用返回值的情况下将 constexpr 函数视为常规函数?
- 链接器输入文件未使用,因为链接未完成,我无法获得.o
- 未使用的C++未优化的静态成员函数/变量
- 仅当一个参数中未使用 std::function 时,模板函数替换才有效
- 如何控制或优化或删除或释放 UNION 中未使用的内存
- 从 C# 调用C++时如何最好地处理未使用的指针?
- 在VS2010中使用发布配置构建时未分配处理的值