2013-08-07 69 views
0

我在代碼中犯了一個錯誤。我寫的是這樣的:的新的uint8_t(64)是做什麼的? POD類型是否有構造函數?

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位可執行文件,並得到相同類型的問題和診斷。

它看起來像一些內存得到分配,但不包括括號之間指示的金額。

我究竟做了什麼?

回答

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) 
0

第一個代碼段初始化一個uint8_t對象具有值64的第二初始化64未初始化uint8_t對象的數組。

+0

'uint8_t變種[64];'...'的std ::矢量 VAR(64);'... –

+0

'uint8_t'只是的typedef'無符號char',至少在的libstdC++。什麼是對象的瑕疵? – jnovacho

+0

@jnovacho在這種情況下,如果你願意,你可以讀爲「(...)初始化一個'unsigned char'對象(...)未初始化的'unsigned char'對象」。這是同一件事。 –

相關問題