如何在C中将大型数组初始化为0

时间:2014-06-02 06:30:04

标签: c

我正在尝试将大型数组的所有列和行初始化为0,而不使用C中的指针。但有时会出现崩溃,有时会显示错误消息“内存不足”#39 ;。而且我不想在我的应用程序中使用指针。

我有一个局部变量(在函数内部)定义如下:

 double myArray[50][785190]={0}; 

我尝试了上面的代码,但它没有用。

2 个答案:

答案 0 :(得分:1)

我认为你可以做到这一点,至少在C ++中,不确定是否/何时将其添加到C中。

double myArray[50][785190]={{0}}; 

但是,正如你所说,你的记忆错误。在堆栈上声明300meg通常不是一个好主意。将其移动到全局变量(在任何函数之外),它将不再在堆栈上。或者声明static。在任何一种情况下,您的代码都不会使用全局或静态数组重入,但我假设您不需要它用于如此大的数组。

否则你也可以这样做来清除它

double myArray[50][785190]
memset(myArray, 0, sizeof(myArray));

虽然任何好的编译器都可能会为这两种风格生成相同的代码。

答案 1 :(得分:0)

如果您不想在二维数组中使用指针,则需要提前知道数组的大小。如果您将数组声明为:

double array[x][y];

然后要初始化它你应该使用这样的嵌套for循环(i和j在其他地方声明):

for(i = 0; i<x; i++)  
    for(j = 0; j<y; j++)  
        array[i][j] = 0;  

我希望这有帮助!

编辑 - 正如其他人所指出的那样,问题在于尺寸,听听他们!