2016-11-24 65 views
0

我想從函數返回處理中獲取地址後打印指針值,但是當我嘗試打印1時,程序很好... 但是當我嘗試使用循環,事情發生..如何在C++中使用循環打印指針

繼承人我的代碼:

int *fibo(int input){ 
     int a=0,b=0,fib=1; 
     int arrfibo[input]; 
     int *arrfib; 

     for(int i=0;i<input;i++){ 
      a = b; 
      b = fib; 
      arrfibo[i] = fib; 
      fib = a + b; 
     } 

     arrfib = arrfibo; 

     cout << arrfib << endl; 

     return arrfib; 
    } 

    main(){ 
     int inp; 
     cout << "Enter number of fibonancci = "; 
     cin >> inp; 
     int *arr; 

     arr = fibo(inp); 


     for(int i=0;i<inp;i++){ 
      cout << *(arr + i) << " "; 
     } // something wrong here the result is (1 1 4462800 4663360 0) 
    } 

感謝,:)

+4

你'返回一個局部變量地址。未定義的行爲超出範圍時。 –

+0

也許您正在訪問未正確分配的內存位置,即包含垃圾值。 –

+0

VLA不是標準的C++。您應該關閉gcc擴展以獲得更多可移植的代碼。 – StoryTeller

回答

0

這個陣列中的「FIBO」在棧中分配,當你在主訪問它已經是已發佈,您無法訪問它

1

你正在返回一個局部變量地址。未定義的行爲超出範圍時。

相反,使用new創建一個數組

int *fibo(int input){ 
     int a=0,b=0,fib=1; 
     int arrfibo = new int[input]; // <-- minimal line to change 
     int *arrfib; // <-- this is useless, you can directly return arrfibo 

(當然你必須delete []當了不使用數組。另一種方法是使用vector<int>避免所有new/delete問題)