2013-10-26 61 views
0

我試圖填補與數字的陣列1111〜8888的數組,其中每個整數在在C 1和8之間的數++。但是,當我運行它時,它只輸出表示錯誤的大負數。我真的知道錯誤是什麼,所以如果你能幫助我,我將不勝感激。謝謝!灌裝與整數

int fillArray() 
    { 
    int arrayPosition; 
    int guesses[4096]; 

arrayPosition = 0; 
for (int i = 1; i <= 8; i++) 
     for (int j = 1; j <= 8; j++) 
     for (int k = 1; k <= 8; k++) 
      for (int m = 1; m <= 8; m++) 
      { 
      guesses[arrayPosition] = ((i * 1000) + (j * 100) + (k *10) + m); 
      cout << guesses[arrayPosition]; 
        arrayPosition++; 
      } 

return guesses[4096]; 
    } 
+0

您的輸出語句導致問題的位置在哪裏? – NoChance

+0

對不起,固定它:) – user2921180

回答

4

您的退貨類型錯誤。 int fillArray(),但是你試圖返回在棧上聲明的int[4096] ...你實際上用return guesses[4096];做的事情是返回你的數組在內存中的第一個內存位置,這可能只是垃圾,因此你的問題與大負數。

您可以通過在堆中分配的數組,並返回一個指針數組的開始解決它:

int * fillArray() 
{ 
    int arrayPosition; 
    int * guesses = new int[4096]; 

    // other stuff stays the same... 

    return guesses; 
} 

然而,由於你的函數被調用fillArray,它會更有意義傳入一個數組並填充它,而不是在函數中創建數組。 (如果你想這樣做,可能會調用它像make_1_to_8_array代替,使其更清楚,你要構造的東西,將需要稍後刪除。)給人一種int*作爲第一個參數將允許你在傳遞你的數組的基地址你要填寫:

void fillArray(int * guesses) 
{ 
    int arrayPosition; 

    // other stuff stays the same... 

} 

或者,如果你想驗證你正在使用的確切大小的數組:

void fillArray(int (&guesses)[4096]) 
{ 
    int arrayPosition; 

    // other stuff stays the same... 

} 

注意,函數現在返回void因爲您只需更新傳入的數組,並且不需要返回任何新內容。

+0

對不起,我不完全按照。我現在只是在學習陣列,所以我很新。在C和C++ – user2921180

+0

陣列從零開始,因此,如果使尺寸的'4096'陣列,則有效索引是'0'通'4095'。你的函數被聲明爲返回一個'int',並且你正在'guesses [4096]'處返回一個整數,這實際上超出了你聲明的數組範圍(因爲它只能達到'4095')。 – DaoWen

+3

哎喲,這是僅在緩衝區傳遞給填滿比較可怕可怕的做法... – 2013-10-26 02:16:38

0

你創建你的陣列本地然後試圖返回它。如果您在返回之前嘗試打印(調試)數組結果,您將看到它是確定的。但是,一旦你回來了,這個數組不是有效的。嘗試將數組傳遞到您的函數中。

+0

@Tribse描述可能不是100%,但修復工作仍然有效,實際上它是一種很好的做法。 – 2013-10-26 02:19:39

+0

是的,我把調整,以查看值是什麼,他們應該是111,1112等,但他們是大負數。如果我不清楚,那麼返回將返回到另一個功能。 – user2921180

+0

@Tribse,我相信目標是返回一個數組,如返回類型(int *)所示。但是,他們正在返回垃圾 - 正如你所指出的那樣。實現他們的目標的適當方式是intead傳入數組並填充它。 – zinc1oxide

3

for -loops看起來是正確的,但你的陣列處理是關閉的,如由其他的答案突出。

在C++中更常用的是使用std::vector並將其作爲參數以作爲參數傳遞給。這可以節省你不得不處理內存分配和釋放的情況。下面是一個示例,其中包括for中的輸出-loops:

#include <iostream> 
#include <vector> 

int fillArray(std::vector<int>& guesses) 
{ 
    for (int i = 1; i <= 8; i++) 
     for (int j = 1; j <= 8; j++) 
      for (int k = 1; k <= 8; k++) 
       for (int m = 1; m <= 8; m++) 
       { 
        guesses.push_back((i * 1000) + (j * 100) + (k * 10) + m); 
        std::cout << guesses.back() << std::endl; 
       } 

    return guesses.back(); 
} 

int main() 
{ 
    std::vector<int> guesses; 
    std::cout << fillArray(guesses) << std::endl; 
}