При освобождении указателя не было проблемы со ВСЕМИ объектами! - PullRequest
1 голос
/ 15 июня 2011

Я работаю (по крайней мере, пытаюсь ...) над Какао приложением, которое использует несколько пользовательских Какао-фреймворков , и одна из этих платформ представляет собой смесь C ++ и Объективный код C ++ (в основном C ++ ) ... Проблема в том, что каждое освобождение памяти внутри этой структуры дает мне освобождаемый указатель не был выделен *Ошибка 1012 *, даже в следующем тривиальном случае:

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 Ответ

1 голос
/ 15 июня 2011

Есть ли вероятность, что одна из этих пользовательских платформ переопределяет new и / или delete? Попробуйте добавить эти замены в вашу тестовую программу и посмотрите, а) тестовая программа собирается без жалоб на множественные определения нового и / или удаления, и б) она запускается и показывает удаление для каждого нового?

 // 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...