我正在尝试将大型数组的所有列和行初始化为0,而不使用C中的指针。但有时会出现崩溃,有时会显示错误消息“内存不足”#39 ;。而且我不想在我的应用程序中使用指针。
我有一个局部变量(在函数内部)定义如下:
double myArray[50][785190]={0};
我尝试了上面的代码,但它没有用。
答案 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;
我希望这有帮助!
编辑 - 正如其他人所指出的那样,问题在于尺寸,听听他们!