2013-04-18 57 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++) 

这就是它的样子。