2013-02-26 63 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; 

你釋放內存,然後返回一個指針。

只要刪除刪除,一切都應該罰款(或至少接近罰款)。