簡體   English   中英

C ++字符分配

[英]C++ char allocation

我正在使用這樣的東西:

char* s = new char;
sprintf(s, "%d", 300);

這行得通,但是我的問題是為什么?

當我嘗試刪除它時,出現錯誤,因此會導致內存泄漏。

之所以“有效”是因為sprintf希望將char*作為其第一個參數,並且您正在給他提供什么。

但是,您實際上只分配了一個 char因此向其寫入多個char未定義的行為 可能分配了一個以上的字節,具體取決於...編譯器,主機體系結構等,但是您不能依賴它。 實際上, 任何事情都可能發生,並且您不想基於這樣的假設來編寫代碼。

為您的字符串緩沖區分配更多空間,或者更好地使用更“現代”的方法。 在您的情況下,可能是這樣的:

std::string s = std::to_string(300);
// Or, C++03
std::string s = boost::lexical_cast<std::string>(300);

(我們這里不是在談論性能,但是初始代碼不正確,無論如何我們幾乎都無法比較)。

此外,此代碼不會泄漏任何內存,因為std::string會在銷毀時釋放其內部內存( s被分配在堆棧上,當它超出范圍時將自動發生)。

您正在創建一個char緩沖區,然后使用四個char(“ 300 \\ 0”)對其進行寫入[不要像我一樣忘記字符串終止],因此'3'進入您分配的內存,而'0' '0'和'\\ 0'轉到下一個屬於其他人的存儲位置。

C ++不會進行緩沖區溢出檢查...因此它可以工作直到不...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM