我正在製作一個工具來解決this,儘管我被代碼本身大規模地拖延了。刪除一個函數創建的數組
在各個地方我有返回(指向)數組的函數。大多數時候這些函數都是遞歸的,而在內部調用中創建的數組可能稍後沒用。
我試過用delete[]
;即使編譯器沒有抱怨,並且程序運行良好,我可以看到正在分配大量的內存。 的代碼看起來是這樣的:(?或者什麼都沒有)
template <typename Type> Type* foo(unsigned short size,...)
{
//...
Type *tmp;
//...
tmp=foo(param,...);
//...
delete[] tmp;
//...
}
然後我問自己,如果,當陣列被創造出來的範圍,delete[]
實際刪除所有已分配的內存或僅僅是第一指標。
我改寫了這段代碼看起來像這樣:
template <typename Type> Type* foo(unsigned short size,...)
{
//...
Type *tmp;
//..
tmp = new Type[i];
tmp = foo(param,...);
//...
delete[] tmp;
//...
}
內存消耗降低了,但我很快就意識到,該陣列我創建之前調用foo(...)
實際上並沒有被刪除...永遠。
所以最後我想:
template <typename Type> Type* foo(unsigned short size,...)
{
//...
Type *tmp, *dump;
//..
dump = tmp = new Type[i];
tmp = foo(param,...);
delete[] dump;
//...
delete[] tmp;
//...
}
但我只是移動的問題又進了一步,並在此過程中創造另一個陣列。不出所料(儘管不是真的)內存消耗猛增。這裏
的問題是:
- 我如何解決這個問題?
- 爲什麼內存消耗會隨着第一次更改而降低?
我真的不希望使用std::vector
因爲重寫所有相關的代碼似乎是一個重大的任務,因爲,作爲一個新秀,我有種感覺好多知道我並不需要一個圖書館的幫助下寫我的程序(顯然我仍然在使用它們;我無法想象寫入如<iostream>
這樣的東西)。
PS:我的代碼在GitHub。
PPS:我爲我的英語道歉;不是母語人士。這裏沒有魔法 -
如果分配與'new'你'delete'釋放它的內存,如果你用'新[]'然後分配用'delete []'釋放(如果你有一些舊的C函數,用'malloc'或'calloc'分配,然後使用'free')。何時何地分配發生並不重要。 –
還有一個更簡單的解決方案來解決你的問題,這將使整個問題都沒有意義:['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。每當你想到「動態數組」或「運行時分配數組」或類似的東西時,你應該總是考慮['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 –
我可能會使用'std :: vector',實際上我已經使用它了,因爲程序本身計算了某些數組的大小,而使用本地數組會使我運行一大堆代碼;首先要計算大小,然後填寫數據。 –