gpt4 book ai didi

c++ - 在动态分配的内存上调用 memset 会导致堆损坏吗

转载 作者:行者123 更新时间:2023-11-30 18:36:03 24 4
gpt4 key购买 nike

在实际项目中调试段错误时,在长时间运行随机测试后会发生崩溃,而这种情况不容易重现。崩溃点显示函数中的崩溃,其编写方式类似于

void deallocateObject( objectType* ptr)
{
ASSERT(ptr);
if(!ptr)
return;
if(ptr->customDeallocator)
ptr->customDeallocator->deallocate();
else
free(ptr);
}

项目中使用了各种类型的分配器和解除分配器。为了验证段错误不是因为分配的内存在释放后未设置为 NULL,我在该函数的最后一个语句之后添加了对 memset 的调用。

memset(ptr, 0, sizeof(objectType));

但是在进行此更改之后,我每次都开始崩溃,并显示消息说堆已损坏。

所以我的问题是,对 memset() 的调用如何以及在什么情况下会导致堆损坏。

最佳答案

So my question is how and in what scenario a call to memset() can cause heap corruption.

任何时候您使用它来修改可能用于跟踪堆内部结构的内存。例如,您刚刚告诉堆分配器您已经使用完毕的内存,现在可以将其用于任何目的,例如跟踪堆的内部结构。

关于c++ - 在动态分配的内存上调用 memset 会导致堆损坏吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43221684/

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