2011-12-29 43 views
1

我想malloc一些內存,對該內存運行一些操作,然後這些操作的結果是持久的。一個例子可能是如果我有一個2-d持久數組,我想要進行逐行更新。如何複製C中的指針?

void update(int **persistent, int row, int rowSize) 
{ 
    int *temp = (int*) malloc(sizeof(int) * rowSize); 
    //...do stuff with temp 
    persistent[row] = temp 
} 

什麼是最安全的方式來做到這一點在C,而不必深複製臨時持久化[行]的內容?如果我按照上面輸入的方式執行而沒有釋放temp,是否會導致內存泄漏,即使我稍後再正確釋放持久性內存?

編輯:我有一個相關的問題是:如果我試圖釋放(臨時)在函數的末尾,我注意到,即使持久[行]維持在臨時數據的引用,內存被釋放。這是因爲malloc/free的設計方式,所以每當一個指針被釋放時就釋放內存而不檢查對該內存的其他活動引用?

+0

你爲什麼不隨意改變持久性[行]? – 2011-12-29 04:44:17

+0

@Leafy當它進入函數時,在持久[行]中已經有數據,我需要將該初始數據和持久[行]的變種版本組合以形成最終的持久[行] – Jeff 2011-12-29 04:47:56

回答

2

如果您沒有正確釋放persistent[row]中的舊指針(如果它不是NULL),則只會導致內存泄漏。只要你釋放舊指針,然後用temp覆蓋它,只要你正確(逐行)免費persistent,你將不會有任何問題。

1

這應該不會導致內存泄漏,因爲如果在釋放持久性時正確釋放所有行,那麼temp中指向上面代碼塊的內存部分也將被釋放。

0

它不會導致內存泄漏,因爲free()將釋放持久指向的內存扇區,這與temp指向的內存扇區相同。