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


How to initialize large size of array to 0 in C

本问题已经有最佳答案,请猛点这里访问。

我正在尝试初始化数组的所有列和行,这些列和行的大小为0,而不使用C中的指针。但有时它会崩溃,有时它会显示一条关于"内存不足"的错误消息。我不想在我的应用程序中使用指针。

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

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

我试过上面的代码,但不起作用。


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

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

但是,正如你所说的,你正在摆脱内存不足的错误。在堆栈上声明300meg通常不是一个好主意。将其移动到全局变量(在任何函数之外),它将不再位于堆栈上。或者宣布为1〔0〕。无论是哪种情况,您的代码都不能用全局数组或静态数组重入,但我假设您不需要这样的数组。

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

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

尽管任何一个好的编译器都可能在任何一种风格的框架下生成相同的代码。


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

1
double array[x][y];

然后,要初始化它,您应该使用一个嵌套的for循环(在别处声明i和j):

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

希望这有帮助!

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