gpt4 book ai didi

c++ - 多次调用 realloc() 似乎会导致堆损坏

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:08 24 4
gpt4 key购买 nike

这段代码有什么问题?每次都会崩溃。

有一次是断言“_ASSERTE(_CrtIsValidHeapPointer(pUserData));”失败,其他时候只是“堆损坏”错误。

更改缓冲区大小会以一些奇怪的方式影响这个问题 - 有时它会在“realloc”时崩溃,而其他时候会在“free”时崩溃。

这段代码我调试了很多次,指针没有异常。

char buf[2000];
char *data = (char*)malloc(sizeof(buf));
unsigned int size = sizeof(buf);

for (unsigned int i = 0; i < 5; ++i)
{
char *ptr = data + size;
size += sizeof(buf);
char *tmp = (char*)realloc(data, size);
if (!tmp)
{
std::cout << "Oh no..";
break;
}
data = tmp;
memcpy(ptr, buf, sizeof(buf));
}

free(data);

谢谢!

最佳答案

你在破坏堆。 realloc 可以自由选择在重新分配时从完全不同的位置返回内存,这会使您的 ptr 无效。重新分配后设置ptr

关于c++ - 多次调用 realloc() 似乎会导致堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2993094/

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