2014-11-14 23 views
0

我有以下代碼:使用new/malloc會避開本地指針的警告嗎?

int* CoverFunction(){ 
    int* result =new int[3]; 
    result[0]=1; 
    result[1]=2; 
    result[2]=3; 
    return result; 
} 

這給了我以下警告:

警告:局部變量 '結果' 的地址返回[-Wreturn-本地地址]

但是不使用新的關鍵字意味着這應該不成問題?在這個函數結束後,我是否有可能刪除我的數據,或者它會安全地在堆棧中存活?如果它能夠安全地存放在堆棧上,我該如何擺脫這個警告?

+0

該代碼不應該產生警告。這是你的實際代碼還是你從內存中打字? – molbdnilo

+0

這就是實際的代碼。但它確實產生了這個警告(注意我使用catkin_make的奇怪版本,而不是普通的編譯器)。 – Thijser

+0

這解決了錯誤(我不知道爲什麼你的編譯器在抱怨),但是它使得調用者有責任在使用後刪除數組。節省自己調試內存泄漏的麻煩,並使用'std :: vector'。或者可能是'std :: array'。 –

回答

2

當你使用new/malloc時,內存是從堆中分配的。

因此,在這種情況下,沒有變量超出範圍的危險,但問題仍然是誰會刪除該內存?

而且我相信即使使用malloc也不能擺脫那個警告。