2013-10-26 63 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; 
}