来自新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
答案 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;
}