初始化大型双数组的问题

时间:2010-08-26 00:48:38

标签: c arrays initialization

来自新C程序员的愚蠢问题...我在以下代码中遇到了分段错误:

#include <stdio.h>
int main(void)
{
double YRaw[4000000]={0}; 
return 0;
}

使用GDB,我收到以下评论:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5dd7b148
0x0000000100000f24 in main () at talk2me.c:18
18 double YRaw[4000000]={0}; // set YRaw[memdepth] so index is 0 to memdepth-1

如果我将YRaw阵列的大小减小10倍,那么一切都能找到。系统中有6GB的RAM,为什么我会收到错误?谢谢,Gkk

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

您尝试在堆栈上声明整个数组。即使你有一个太字节的RAM,也只有一个小的,固定的部分专用于堆栈空间。需要使用malloc

在堆上分配大量数据
#include <stdio.h>
int main(void)
{
  double* YRaw = malloc(4000000 * sizeof(double));
  memset(YRaw, 0, 4000000 * sizeof(double));

  /* ... use it ... */

  free(YRaw); /* Give the memory back to the system when you're done */

  return 0;
}

另请参阅:"What and where are the stack and heap?"