我有一個問題。C++ new * char不爲空
我在ASIO中開發服務器,數據包在尖括號中。
當我創建新的字符(例如char * buffer = new char[128];
)我必須手動清理它爲空。
通過:
for(int i =0;i<128;i++)
{
buffer[i] = 0x00;
}
我做錯了什麼,那char是不明確?
我有一個問題。C++ new * char不爲空
我在ASIO中開發服務器,數據包在尖括號中。
當我創建新的字符(例如char * buffer = new char[128];
)我必須手動清理它爲空。
通過:
for(int i =0;i<128;i++)
{
buffer[i] = 0x00;
}
我做錯了什麼,那char是不明確?
您不必遍歷未初始化值的數組。您可以動態地實例零的數組是這樣的:
char * buffer = new char[128](); // all elements set to 0
^^
分配的內存不會清除,它將包含隨機的東西。這就是內存分配的工作原理。您必須運行for
-loop或使用memset
手動清除它。
因爲它是一個指針,必須那樣做:
for(int i = 0; i < 128; i++)
{
(buffer + i) = 0x00;
}
-1:代碼是錯誤的(賦值0x00給右值),並且建議是錯誤的(OP的代碼確實編譯,你沒有)。 – milleniumbug
1.你忘記解除LHS的引用,所以你試圖分配給r值(你的代碼不會編譯)。 2'buffer [i]'是通過與'*(buffer + i)'相同的語言標準。雖然在這種情況下數組和指針*不同於每種語言標準,它們在某種程度上是可以互換的。 –
有兩種類型的調用C++的new操作符的方式 - 默認初始化,初始化爲零。
爲默認INITIALISE(這將離開值undefined)電話:
int * i = new int;
它是那麼不確定behavoir閱讀或直至它被設置使用此值。
要zeroinitialise(這將設置爲0)使用方法:
int * i = new int();
這也適用於數組:
int * i = new int[4]; // ints are not initialised, you must write to them before reading them
int * i = new int[4](); // ints all zero initialised
還有更多的一些信息here
你的問題已經回答了[類型名稱後的圓括號與新的區別?](http://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name -make-A-差與新)。 – Troubadour