比方說,我有一個非常簡單的循環是這樣的:簡單使用循環動態內存會導致bad_alloc的
#include <iostream>
int main() {
int i = 0;
while (1)
{
char* c = new char[32];
std::cout << i << " " << c[0] << std::endl;
delete[] c;
i++;
}
return 0;
}
正如你可以在循環我分配與新的運營商的一些記憶的開始看。我打印出來並刪除它。如果我運行這個代碼它可以工作,但在某一點它停止並拋出std :: bad_alloc。
我不明白爲什麼發生這種情況。它不應該耗盡內存,因爲每次刪除時都會釋放它。如果程序有足夠的內存來循環一次或兩次,它應該有足夠的內存來無限循環。它只有32個字節。
我試圖在兩臺不同的計算機上運行它,每個計算機在中斷之前執行不同次數的循環。
我做錯了什麼?
編輯: 我用MinGW的G ++(GCC)4.8.1在Windows 8
確定這是您在此處顯示的[最小程序](http://stackoverflow.com/help/mcve)? –
@πάνταῥεῖ是的,我會在最後添加_int main_和_return 0_以清楚地說明。 – quipe
無法重現。請指定您的平臺,編譯器版本和編譯/鏈接選項。 – NPE