我同时使用VTK和MSVC,在尝试加载数据时出现了奇怪的行为。我对它进行了一些修补,甚至下面的代码都会产生堆损坏,有什么想法是发生了什么,或者什么地方可能出了问题?
vtkAbstractArray *vtkDataReader::ReadArray(const char *dataType, int numTuples, int numComp)
{
char* type=strdup(dataType);
free(type); // <--- here the heap corrution appears
...这是调用堆栈:
> msvcr90d.dll!_CrtIsValidHeapPointer(const void * pUserData=0x00691da0) Zeile 2103 C++
msvcr90d.dll!_free_dbg_nolock(void * pUserData=0x00691da0, int nBlockUse=1) Zeile 1317 + 0x9 Bytes C++
msvcr90d.dll!_free_dbg(void * pUserData=0x00691da0, int nBlockUse=1) Zeile 1258 + 0xd Bytes C++
msvcr90d.dll!free(void * pUserData=0x00691da0) Zeile 49 + 0xb Bytes C++
Simulator.exe!vtkDataReader::ReadArray(const char * dataType=0x0370b734, int numTuples=24576, int numComp=3) Zeile 1401 + 0xc Bytes C++
Simulator.exe!vtkDataReader::ReadPoints(vtkPointSet * ps=0x081702d0, int numPts=24576) Zeile 1936 + 0x15 Bytes C++编辑:
使用这段代码而不是strdup工作得很好,strdup在msvc上有什么问题吗?
char *type=(char*)malloc(100);
strcpy(type,dataType);发布于 2012-01-05 18:48:50
strdup本身在msvc中是被弃用的,并且在网络上也有类似的堆损坏的报告,微软说你应该使用_strdup来代替
http://msdn.microsoft.com/en-us/library/ms235454
编辑:见下文-真正的原因似乎是vs运行时动态链接库的发布和调试版本都被加载了,这只是巧合,_strdup修复了这个问题
https://stackoverflow.com/questions/8740500
复制相似问题