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];
    }
4

3 に答える 3

4

戻り値の型が間違っています。int fillArray()、しかし、スタックで宣言された an を返そうとし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*最初の引数として an を指定すると、ベースアドレスを渡すことができます。埋めたい配列の:

void fillArray(int * guesses)
{
  int arrayPosition;  

  // other stuff stays the same...

}

または、正確なサイズの配列を使用していることを確認したい場合:

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

  // other stuff stays the same...

}

渡された配列を更新するだけなので、関数が返されるようになったことに注意してくださいvoid。新しいものを返す必要はありません。

于 2013-10-26T02:07:36.240 に答える
3

あなたのforループは正しいように見えますが、他の回答で強調されているように、配列の処理はオフです。

C++ では、これを使用し、これを参照によって引数としてstd::vector渡すのがより一般的です。これにより、メモリの割り当てと割り当て解除を処理する必要がなくなります。-loopsの出力を含む例を次に示します。for

#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;
}
于 2013-10-26T02:30:43.647 に答える