2015-04-15 29 views
1

我有C++代码,我将通过interop机制从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#中的任何地方使用。

我的问题是:

  1. 在C++代码,我应该设置inputList为NULL?
  2. 如果我将它设置为NULL,我应该如何最好地设置它以避免错误?我是否应该使用inputList=0inputList=NULLinputList=(int*)malloc(0)
  3. 如果我不设置它,或者,如果我将它设置错误,会带来什么后果?会出现一些非常难以诊断的错误吗?我担心的是,如果我没有正确设置,一些机器可能会运行代码,其他机器可能不会。当程序停止工作时,它会在很晚之后停止,导致我们很难诊断问题,如AccessViolationException
  4. 所有的一切,如果我将它设置为inputList=(int*)malloc(0),或者如果我不把它所有,将在不同的地方,程序崩溃以后,在一个非常不可预测和不一致的方式,这取决于机器代码正在运行?

分配一个指向(int*)malloc(0)的指针会导致不可预知的崩溃?我应该如何正确设置一个未使用的指针?

+1

为什么downvote?现在SO的一个令人讨厌的事情是,人们只是在没有解释或任何改善建议的情况下倒退,这个问题是有效的,尽管如此。 – Graviton

回答

1

只需将其设置为NULL,或者,如果你的编译器支持它,nullptr。这表明它并不指向任何有用的东西。

因此,无论inputList=NULLinputList=nullptr

显然,不设置它在所有,是最糟糕的事情。如果有任何代码使用它,它将表现不可预知。

我不知道,为什么一个想要做inputList=(int*)malloc(0)

+0

谢谢,这正是我的想法。但是,如果我将它设置为'inputList =(int *)malloc(0)',或者如果我根本不设置它,程序会在以后以不可预知的和不一致的方式在另一个地方崩溃,取决于代码运行在哪台机器上? – Graviton