2017-04-17 18 views
1

我寫了一個代碼將公斤轉換爲磅和石頭。一段代碼如下所示。C++。何時刪除一個C風格的數組以釋放內存

float *weightoutput = weight_conversion(weight); 

具有如下功能。我用了一個C數組,

float* weight_conversion(float x){ 

float *stones_pounds = new float[2]; //C-style array 
float z, y; 
z = x*0.15747304441776971; // (1 stone = 6.3503 kilo) 
y = x*2.2026;    // (1 kilo = 2.2026 pounds) 
stones_pounds[0] = z; 
stones_pounds[1] = y; 

return stones_pounds; 
}  

我在多篇文章閱讀,如果你使用的「新」,你必須使用「刪除」來釋放內存。問題我已經是,怎麼可能我在這個設置中刪除了stones_pounds。由於stones_pounds被使用直到函數中的最後一行作爲回報,我不認爲我可以在函數中使用delete [] stones_pounds。既然它不是全局變量,我也不能在主函數中刪除它。那麼我該如何去使用delete []運算符來釋放內存呢?唯一的替代方法是更改​​代碼的結構以便於刪除[]運算符?

+7

爲什麼不使用'std :: vector'或'std :: array'?編輯:在這種情況下,你實際上可能會返回一個'std :: pair '這可能會更清晰 – RyanP

+0

請參閱[這個問題在返回數組](http://stackoverflow.com/questions/27410943/return -arrays從 - 一個函數式-C)。您仍然可以在返回中使用C風格的數組,並且根本不需要使用'new []'(通過使用'struct')。 – PaulMcKenzie

+0

哎呀,爲什麼不只是返回一個'struct'? – Donnie

回答

2

std::array可能是一個更好的選擇,然後在此示例中使用newdelete

就是說,你返回new -ed指針並將結果存儲爲float *weightoutput。爲了釋放內存,當你通過delete [] weightoutput;完成後,你應該撥打delete

+0

同意,std :: array是一個更好的選擇。我將用std :: array替換'new',但好奇心好了。所以我想在繼續之前嘗試一下。 –