目前我一直對學校作業感興趣,正在處理一些非常討厭的內存泄漏問題。在調試時,我將問題的一部分縮減爲一段代碼。爲什麼此代碼會產生內存泄漏?
這裏是代碼,我調整來說明泄漏的極度簡化版本:
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);
do {
char *name = new char;
char *cname = new char[10];
cin >> cname;
name = cname;
delete [] name;
} while(false);
_CrtDumpMemoryLeaks();
所以我的問題是,爲什麼這產生了內存泄漏?我試過一堆東西來解決它,但沒有任何工作。
編輯:
嗯,看來我已經被誤解的指針是如何運作的。出於某種原因,我假設指針初始化時沒有指向NULL而不是內存塊,因此不需要處理。
簡單的問題可以得到簡單的答案。謝謝。
'的char * name = nullptr'將指向沒有記憶,但調用'new'分配內存(並因此需要被釋放) – Tas
您分配一個字符,分配10個字符,做一些東西,刪除10個字符,但不要刪除單個字符(你實際上並不需要分配,但你做了)。 – immibis