0

我在代码中犯了一个错误。我写了类似的东西:

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 位可执行文件,我得到了同样的问题和诊断。

似乎分配了一些内存,但不是括号之间指示的数量。

我实际上做了什么?

4

2 回答 2

4
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)
于 2013-08-07T10:24:54.470 回答
0

第一个片段初始化一个 uint8_t值为 64 的对象。第二个片段初始化一个包含 64 个未初始化uint8_t对象的数组。

于 2013-08-07T10:20:37.733 回答