被释放的指针没有分配ALL对象的问题!

时间:2011-06-15 08:11:34

标签: c++ xcode gcc memory-management memory-leaks

我正在 Cocoa 应用程序上工作(至少尝试...),该应用程序使用多个自定义 Cocoa框架,其中一个框架是< strong> C ++ 和 Objective C ++ (主要是 C ++ )代码...问题是这个框架内的每个内存释放都给了我指针释放未分配错误,即使在以下微不足道的情况下:

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

1 个答案:

答案 0 :(得分:1)

是否有机会,其中一个自定义框架重新定义new和/或delete?尝试将此替换添加到您的测试程序中,并查看a)测试程序是否构建而不抱怨新的和/或删除的多个定义,以及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);
}