2013-04-18 61 views
1

Iam試圖獲得這個數組的最大數量,它的數字從-20到30,但它返回像這樣的奇怪數字 - > 2255667如果一切順利,這是不可能的。從函數返回指針會給出奇怪的數字

int * ptomx(int a[],int n) 
{ 
    int max=-100; 
    int *point; 

    for(int i=0;i<=n;i++) 
    { 
     if(max<a[i]) 
     { 
     max = a[i]; 
     } 
    } 
    point = new int; 
*point = max; 
    return point; 
} 

這是我在主做()

int maxTemp; 

maxTemp=*(ptomx(a,n)); 

cout<<"Max temp is:"<<maxTemp; 

是因爲在函數指針的函數返回後銷燬,並給出該存儲單元中的隨機數。如果這種情況需要解除引用,但是如何解決?

+1

您有內存泄漏。返回的指針永遠不會被釋放。爲什麼不將該值作爲普通的非指針整數返回? –

+0

我應該這樣做導致即時學習使用指針。 –

+0

@AlexMoumoulidis你不應該這麼做*正是這樣*因爲'main'中指針的特殊用法也會泄漏內存。考慮使用'int * maxTemp;'和後面的'delete maxTemp;'。 –

回答

7

您正在讀取超出數組末尾的值。這些值可以是任何東西並且是什麼導致不正確的結果。

for(int i=0;i<=n;i++) 
       //^^ 

應改爲

for(int i=0;i < n;i++) 
+0

Thx很多我現在覺得很愚蠢,我試圖解決這個問題3個小時,這很簡單。 –

+0

@AlexMoumoulidis最好不要在你的情況下使用指針,因爲你沒有真正操作它。 – taocp

+0

最好不要在我的情況下使用C++並返回到java:P –

1

您的ptomx內循環運行出界。

想一想: 如果你想要每一個值,但沒有超過最後一個值,你想使用> =? 如果你有10個值,他們在內存中的實際位置(理論上)是0-9。您應該只使用>來彌補這一點。

for(int i=0;i<n;i++) 

這就是它的樣子。