首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strdup导致的堆损坏

strdup导致的堆损坏
EN

Stack Overflow用户
提问于 2012-01-05 17:53:49
回答 1查看 2.4K关注 0票数 2

我同时使用VTK和MSVC,在尝试加载数据时出现了奇怪的行为。我对它进行了一些修补,甚至下面的代码都会产生堆损坏,有什么想法是发生了什么,或者什么地方可能出了问题?

代码语言:javascript
复制
vtkAbstractArray *vtkDataReader::ReadArray(const char *dataType, int numTuples, int numComp)
{

  char* type=strdup(dataType);

  free(type); // <--- here the heap corrution appears

  ...

这是调用堆栈:

代码语言:javascript
复制
>   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上有什么问题吗?

代码语言:javascript
复制
char *type=(char*)malloc(100);
strcpy(type,dataType);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-05 18:48:50

strdup本身在msvc中是被弃用的,并且在网络上也有类似的堆损坏的报告,微软说你应该使用_strdup来代替

http://msdn.microsoft.com/en-us/library/ms235454

编辑:见下文-真正的原因似乎是vs运行时动态链接库的发布和调试版本都被加载了,这只是巧合,_strdup修复了这个问题

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8740500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档