我在代码中犯了一个错误。我写了类似的东西:
uint8_t * var = new uint8_t(64);
代替:
uint8_t * var = new uint8_t[64];
编译器(gcc)没有抱怨,但在执行时,我收到一条SEGFAULT
消息:
... free(): invalid next size (fast): ...
使用 valgrind (memchecker) 运行:我得到以下诊断:
Invalid write of size 8
我用 gcc 4.7.2 进行了尝试,生成了一个在 Linux 上运行的 64 位可执行文件。我还尝试使用 gcc 4.5.2,生成 32 位可执行文件,我得到了同样的问题和诊断。
似乎分配了一些内存,但不是括号之间指示的数量。
我实际上做了什么?