2013-07-11 28 views
0

下面的代碼:數組作爲arguement傳遞到顯示垃圾的功能值

int *num_arr = number_to_array(num); 
cout<<"\nNum aaray:"<<*(num_arr+1); 
display(num_arr, digit_count); 

的COUT語句這裏顯示正確的值,但顯示()不是。顯示器正在示出無用值用於顯示)

代碼(:

void display(int num_arr[],int dc) 
{ 
cout<<"\n"; 
cout<<"\n"<<num_arr[0]; 
cout<<"\n"<<num_arr[1]; 
for(int i = (dc-1); i>=0; i--) 
{ 
     cout<<num_arr[i]; 
} 

}

int* number_to_array(int num) 
{ 
int i=0; 
int num_arr[100]; // make dynamic array 
    while(num!=0) 
    { 
    num_arr[i] = num%10; 
    num = num/10;     
    i++; 
    } 
return num_arr; 
} 

可能是什麼原因?

+2

你可以發佈display()函數嗎? – Ermir

+3

[C++函數返回指針]可能的重複(http://stackoverflow.com/questions/8969292/returning-pointer-from-a-function-in-c) – Mat

回答

2
  1. 您正在返回本地變量的地址(數組的名稱是它的第一個元素的地址)。這是錯誤的,因爲退出函數後數組不會存在。它是靜態數組,不是動態的。

可能的解決方案:

  • (Prefferable)使用std::vector
  • 使用動態數組(int *p = new int[100]

提案 - 學習C/C++基礎:指針,數組功能參數和返回值。

+0

但爲什麼呼叫後的cout語句使數組函數顯示正確的值? – user1995120

+0

這只是運氣,記憶中的價值沒有被另一個變量覆蓋。 –

+0

@ user1995120因爲沒有人覆蓋它 - 但它可以發生在每毫秒 –