我在代碼中犯了一個錯誤。我寫的是這樣的:的新的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位可執行文件,並得到相同類型的問題和診斷。
它看起來像一些內存得到分配,但不包括括號之間指示的金額。
我究竟做了什麼?
'uint8_t變種[64];'...'的std ::矢量 VAR(64);'... –
'uint8_t'只是的typedef'無符號char',至少在的libstdC++。什麼是對象的瑕疵? – jnovacho
@jnovacho在這種情況下,如果你願意,你可以讀爲「(...)初始化一個'unsigned char'對象(...)未初始化的'unsigned char'對象」。這是同一件事。 –