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(),但是你试图返回一个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名称,以更清楚地表明您正在构建稍后需要删除的内容。)将 anint*作为第一个参数将允许您传入基地址您要填充的数组:

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-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;
}
于 2013-10-26T02:30:43.647 回答
0

您正在本地创建数组,然后尝试返回它。如果您在返回之前尝试打印(调试)数组的结果,您会发现它没问题。但是,一旦您返回,该数组就不再有效。尝试将数组传递给您的函数。

于 2013-10-26T02:12:31.823 回答