Mac OSX上的Qt App中完全随机的malloc错误

时间:2012-02-09 00:59:43

标签: c++ macos qt malloc

#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();
}

当我运行上面的代码时,大约有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 个答案:

答案 0 :(得分:5)

该行:

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 newoperator delete合并 - 您不能混合使用不同的组合。

答案 1 :(得分:2)

你可能想说

char* aa = new char[25];

创建一个包含25个字符的数组。