我在代码中犯了一个错误。我写了类似的东西:
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位可执行文件,我得到了同样的问题和诊断。
看起来像是分配了一些内存,但不是括号之间指示的数量。
我到底做了什么?
答案 0 :(得分:1)
uint8_t * var = new uint8_t(64); // dynamically allocated one uint8_t object, and
// initialize to 64
uint8_t * var = new uint8_t[64]; // dynamically allocate space for
// 64 uint8_t objects (no initialization)
答案 1 :(得分:0)
第一个代码段使用值64初始化一个 uint8_t
对象。第二个代码段初始化一个包含64个未初始化uint8_t
对象的数组。