Совершенно случайные ошибки malloc в приложении Qt на Mac OSX - PullRequest
2 голосов
/ 09 февраля 2012
#include <QtCore/QCoreApplication>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    a.setApplicationName("xxx");
    char bb[25] = {10, 1, 64, 18, 20, 116, 97, 114, 97, 110, 103, 105, 108, 108, 51, 64, 103, 109, 97, 105, 108, 46, 99, 111, 109};
    char* aa = new char(25);
    memcpy(aa, bb, 25);
    delete aa;
    return a.exec();
}

Когда я запускаю приведенный выше код, примерно 1 из 5 раз я получаю следующую ошибку:

tftest(28702,0x7fff70de3cc0) malloc: *** error for object 0x10160ee28: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
Press <RETURN> to close this window...

Это сводит меня с ума, так как ошибка появляется совершенно случайно.

Весь журнал аварий находится на http://pastebin.com/Qtp9T2gW

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Линия:

char *aa = new char(25); // dynamically allocate a single char = 25

Совершенно отличается от:

char *aa = new char[25]; // dynamically allocate an array [0..24] of char

Вам также нужно объединить operator new[] с operator delete[] и operator new с operator delete - вы не можете смешивать и сопоставлять различные комбинации.

2 голосов
/ 09 февраля 2012

Вы, вероятно, хотели сказать

char* aa = new char[25];

Для создания массива из 25 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...