C# 从c调用DLL函数时内存冲突#

C# 从c调用DLL函数时内存冲突#,c#,c,dll,swig,C#,C,Dll,Swig,我已经创建了dll使用swig从。当我尝试调用其中一个函数时: var layers= LibreDWG.dwg_get_layers(dwg_Data); 我得到了内存冲突验证: Exception thrown at 0x00000000622A995F (LibreDWG.dll) in LibreDWG_WPF.exe: 0xC0000005: Access violation reading location 0x0000000000000030. 这个错误只发生在大文件上,小文件

我已经创建了dll使用swig从。当我尝试调用其中一个函数时:

var layers= LibreDWG.dwg_get_layers(dwg_Data);
我得到了内存冲突验证:

Exception thrown at 0x00000000622A995F (LibreDWG.dll) in LibreDWG_WPF.exe: 0xC0000005: Access violation reading location 0x0000000000000030.
这个错误只发生在大文件上,小文件可以正常工作。 swig生成的包装器代码:

  public static SWIGTYPE_p_p__dwg_object_LAYER dwg_get_layers(Dwg_Data dwg) {
    global::System.IntPtr cPtr = LibreDWGPINVOKE.dwg_get_layers(Dwg_Data.getCPtr(dwg));
    SWIGTYPE_p_p__dwg_object_LAYER ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_p__dwg_object_LAYER(cPtr, false);
    return ret;
  }
c代码:

EXPORT Dwg_Object_LAYER **
dwg_get_layers (const Dwg_Data *dwg)
{
  unsigned int i;
  unsigned int num_layers = dwg_get_layer_count (dwg);
  Dwg_Object_LAYER **layers;

  assert (dwg);
  layers
      = (Dwg_Object_LAYER **)calloc (num_layers, sizeof (Dwg_Object_LAYER *));
  for (i = 0; i < num_layers; i++)
    layers[i] = dwg->layer_control.entries[i]->obj->tio.object->tio.LAYER;
  return layers;
}
导出Dwg\u对象\u图层**
dwg_获取_图层(常量dwg_数据*dwg)
{
无符号整数i;
unsigned int num_layers=dwg_get_layer_count(dwg);
图纸\对象\图层**图层;
断言(dwg);
层
=(Dwg_对象_层**)calloc(num_层,sizeof(Dwg_对象_层*);
对于(i=0;ilayer\u control.entries[i]->obj->tio.object->tio.layer;
返回层;
}
你有什么建议吗?谢谢你的帮助