我正在(至少尝试...)Cocoa 应用程序,它使用多个自定义 Cocoa 框架,其中一个框架是 < strong>C++ 和Objective C++(主要是C++)代码...问题是这个框架内的每个内存释放都给我指针freed was not allocated 错误,即使在以下微不足道的情况下也是如此:
class testClass
{
public:
testClass() { }
virtual ~testClass() { }
};
void test()
{
testClass *p = new testClass();
delete p;
// malloc: *** error for object 0x2800510: pointer being freed was not allocated
//*** set a breakpoint in malloc_error_break to debug
p = NULL;
}
malloc_error_break 告诉我正在调用对象的析构函数,但是每次下一次分配都会增加对象的地址,所以内存实际上没有被释放... 请告诉我,为什么?!
我必须使用 Mac OS X 10.6.0、XCode 3.2.1、Apple GCC 4.2.1。
最佳答案
这些自定义框架中的一个是否有机会重新定义 new
和/或 delete
?尝试将此替换添加到您的测试程序并查看是否 a) 测试程序构建时没有提示 new 和/或 delete 的多个定义以及 b) 它运行并显示每个新的删除?
// not a real replacement, for testing purposes only
void * operator new (size_t sz)
{
printf("my new\n");
return malloc(sz);
}
void operator delete (void*ptr)
{
printf("my delete\n");
free(ptr);
}
void operator delete[] (void*ptr)
{
printf("my delete[]\n");
free(ptr);
}
关于c++ - 正在释放的指针未分配给所有对象的问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354839/