gpt4 book ai didi

c++ - strdup 的堆损坏

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:49 25 4
gpt4 key购买 nike

我将 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);

最佳答案

这样的 strdup 在 msvc 中被弃用,并且有关于网络上类似堆损坏的报告,微软声明你应该改用 _strdup

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

[编辑:见下文 - 真正的原因似乎是正在加载的 vs 运行时 dll 的发布和调试版本,_strdup 修复了问题只是巧合]

关于c++ - strdup 的堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8740500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com