瓦兰在抱怨这段代码,我真的不明白为什么?
==9144==ERROR: AddressSanitizer: attempting double-free on 0x60200000eff0 in thread T0:全日志
我正在为我的代码使用自定义分配器,但下面是它的较短版本,它显示了相同的症状。如果我是在嵌入式系统上运行,那么我不需要释放内存,但是我总是希望确保在基于x86的系统上运行时没有泄漏任何内存,并且我正在使用valgrind来验证这一点。
/*
g++ test.cpp -fsanitize=address -fno-omit-frame-pointer
./a.out
*/
#include <iostream>
class TestMemoryPool{
};
void* operator new(size_t n, TestMemoryPool* pool)
{
#ifdef CUSTOM_ALLOCATER
//snip
#else
void *tmp = ::operator new(n);
return tmp;
#endif
}
void* operator new[](size_t n , TestMemoryPool* pool)
{
#ifdef CUSTOM_ALLOCATER
//snip
#else
void *tmp = ::operator new(n);
return tmp;
#endif
}
void operator delete(void* ptr, TestMemoryPool* pool)
{
#ifdef CUSTOM_ALLOCATER
//snip
#else
::operator delete(ptr);
#endif
}
void operator delete[](void* ptr , TestMemoryPool* pool)
{
#ifdef CUSTOM_ALLOCATER
//snip
#else
::operator delete(ptr);
#endif
}
int main()
{
TestMemoryPool *pool;
float *signalGen = new (pool) float[100];
TestMemoryPool *p = new (pool) TestMemoryPool();
operator delete[](signalGen, pool);
operator delete(p, pool);
delete p;
} 发布于 2020-06-04 08:13:17
因为要删除指针p两次,所以您获得了双重自由错误:
operator delete(p, pool);
delete p;https://stackoverflow.com/questions/62189453
复制相似问题