2013-02-26 69 views
0

我有这个代码,它通过指针返回一个动态数组的地址..但我怎么能通过引用返回一个动态数组的地址?谢谢你..动态数组的地址

int* e(int a[][2],int rows) 
{ 
    int *p; 

    p=new int[2]; 

    int max,min; 

    max=min=a[0][0]; 

    int i,j; 
    for(i=0;i<rows;i++) 
    { 
     for(j=0;j<2;j++) 
     { 
      if(min>a[i][j]) 
       min=a[i][j]; 
      else if(max<a[i][j]) 
       max=a[i][j]; 
      else; 
     } 
    } 

    p[0]=min; 
    p[1]=max; 
    delete []p; 
    return p; 
} 
+4

使用'std :: vector '而不是'new int []'并突然解决了所有的问题。 – 2013-02-26 15:59:48

+0

“但我怎么能通过引用返回一个动态数组的地址”为什么你想这样做? – GManNickG 2013-02-26 16:04:12

+0

@GManNickG我有这个作业,你知道:) – msLangdon95 2013-02-26 16:06:02

回答

3

“返回(荷兰国际集团)的参考动态数组的地址”,在这种情况下,将回落至基准返回p,但p是一个局部变量,所以内存将得到释放当函数退出时,这样就不起作用。

如果你真的想,这应该工作:(但我强烈疑问,这是你应该做什么,并有可能导致内存泄漏)

int* &e(int a[][2],int rows) 
{ 
    int **p = new int*; 
    *p = new int[2]; 
    ... 
    return *p; 
} 

注意,这是没有意义的:

delete []p; 
return p; 

你释放内存,然后返回一个指针。

只要删除删除,一切都应该罚款(或至少接近罚款)。