新的uint8_t(64)有什么作用? POD类型有构造函数吗?

时间:2013-08-07 10:18:51

标签: c++

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

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

看起来像是分配了一些内存,但不是括号之间指示的数量。

我到底做了什么?

2 个答案:

答案 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对象的数组。