我需要一些幫助來計算內存分配錯誤。我不斷收到此錯誤:將字符串轉換爲char時的內存分配錯誤*
Error: Memory could not be allocated.
...當fList
是在下面的代碼大:
for (unsigned int ii=0; ii<fList.size(); ii++) {
char *fName = new char[fList[ii].length() + 1];
strcpy(fName, fList[ii].c_str());
err = xInitFile(fName, ii+1);
if(err != 0) {
cout << "FOOBAR" << endl;
}
delete[] fName;
}
fList
是std::vector<std::string>
。
功能xInitFile
是C共享庫函數具有下列原型:
int xInitFile(char *fName, int fHandle)
如果fList
較小,則一切都正常運行。我很確定問題在於我如何將字符串轉換爲char *
,但我無法弄清楚如何解決它。據我所知,fName
總是被刪除,所以它似乎不是內存泄漏。我的內存使用量在運行代碼時也不會激增。
編輯:
註釋掉err = xInitFile(fName, ii+1);
消除錯誤。這意味着分配錯誤發生在xInitFile
,對吧?我之前並沒有想過這樣做,因爲我認爲問題出現在我的代碼中(我是新來的C++)。
那麼,誰打印服務 '錯誤:內存不能分配'?它甚至與你的內存分配有關嗎?好像你在這裏展示不相關的代碼片段...... – 2013-02-21 16:04:25
如果你在for循環中刪除了fName,那麼你使用它並立即丟棄它是不是更好?可能是因爲你沒有刪除,並且在每次迭代中你都會得到一個fName的新位置,導致內存佔用 – 2013-02-21 16:04:33
用try/catch包裝'new'並打印一些東西。如果你看到你的消息,那麼這個錯誤是由'new'產生的,在另一種情況下是'xInitFile'產生的。 – borisbn 2013-02-21 16:04:50