我正在尝试使用数字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 :(得分: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
,因为您刚刚更新了传入的数组,并且您不需要返回任何新内容。
答案 1 :(得分:3)
您的for
- 循环看起来是正确的,但您的阵列处理已关闭,正如其他答案所突出显示的那样。
在C ++中更常用的是使用std::vector
并在中通过引用将其作为参数传递。这样可以节省您处理内存分配和释放的麻烦。这是一个例子,包括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;
}
答案 2 :(得分:0)
您正在本地创建阵列然后尝试返回它。如果您在返回之前尝试打印(调试)数组的结果,您将看到它没问题。但是,一旦返回,数组就不会有效。尝试将数组传入您的函数。