我的問題是關於下面的簡單代碼:std :: string如何保持內存超出範圍沒有泄漏?
#include <iostream>
using namespace std;
const char* call()
{
string str("Hey there.");
return str.c_str();
}
int main()
{
const char* blah = call();
cout << blah << endl;
system("pause");
return 0;
}
輸出: 「嘿。」
現在,它是如何保持「你好」的記憶。當std :: string在方法結束時被銷燬時,它是不會被銷燬或導致內存泄漏的?我不是一個C++專家,但我相信如果字符串分配內存持有「嘿,那裏。」在堆棧中,當字符串超出作用域(方法結束)時,它將被刪除,並且如果字符串在堆上分配內存以存儲「Hey there」。那麼這會導致內存泄漏,因爲它顯然不會破壞內存,因爲我們在字符串超出範圍之後訪問內存。
那麼,我怎麼能夠訪問c_str()指向的內存塊而不會導致內存泄漏?
非常感謝您的迴應。
愚蠢的運氣。您正在使用的內存位置尚未被重用。 – user4581301
謝謝,user4581301。 –
@ user4581301:實際上,我確實認爲它是_unlucky_它的工作!理想情況下,運行時系統會因不正確的代碼而失敗。在測試環境中這樣做的一個方法是使頁面無法訪問被刪除的內存。當然,這會產生一個緩慢的系統,但可能會揭示訪問陳舊數據的不少錯誤。另一種方法是在釋放類的析構函數之前用一些模式填充內存。 –