【发布时间】:2015-10-14 19:39:54
【问题描述】:
我有一个这样的程序,
计划 1
#include <stdio.h>
#include <string.h>
#define ARRAY_SIZE 0x320204
int main ()
{
unsigned long long_array[ARRAY_SIZE];
memset (long_array, 0, ARRAY_SIZE);
return 0;
}
方案 2
#include <stdio.h>
#include <string.h>
#define ARRAY_SIZE 0x320204
int main ()
{
unsigned long long_array[ARRAY_SIZE] = {0};
//memset (long_array, 0, ARRAY_SIZE);
return 0;
}
两个程序都给出了分段错误。
请说明如何初始化这个长数组。提前致谢。
【问题讨论】:
-
代码在尝试分配这个“巨大”数组时可能达到了堆栈的大小限制。
-
这个“
memset (long_array, 0, ARRAY_SIZE);”很可能不会像您预期的那样(但很少)。 -
非常相似的问题就像 10 分钟前一样......
-
数字0x320204等于3277316,大于堆栈大小。
-
除了
ARRAY_SIZE是一个很大的数字之外,代码应该是memset(long_array, 0, sizeof *long_array * ARRAY_SIZE);或者更好的memset(long_array, 0, sizeof long_array);