当我想要定义设置1000000时,程序正在崩溃

当我想为SIZE 1.000.000 #define ,我的程序在启动main函数之前崩溃了,但是当我#defineSIZE 100.000时它工作。 我的程序中有两个数组初始化。

 #define SIZE 1000000 char *baza_vocka[SIZE]; char b_vocka[SIZE]; 

编辑 :他们是局部变量。

在1M的情况下,您尝试在堆栈上分配一个数组,该数组大于堆栈大小。 对于这样的大小,您需要在堆上分配内存。

例如:

 int main() { // allocation on the heap char **baza_vocka = malloc(sizeof(char*)*SIZE); char *b_vocka = malloc(sizeof(char)*SIZE); // working code baza_vocka[1] = 0x0; b_vocka[1] = 'a'; // cleaning the heap free(b_vocka); free(baza_vocka); } 

我猜baza_vocka是一个局部变量,也许在main

你正在试验一些堆栈溢出 ,….你的调用堆栈中的本地调用帧通常应该很小(几千字节)

你不应该有这么大的局部变量。 使用malloccalloc在堆中分配这样的大数组。 不要忘记测试他们没有失败。 阅读malloc(3)的文档,不要忘记free这样一个堆分配的数组。 注意内存泄漏和缓冲区溢出 。 如果可用,请使用valgrind 。

在当前桌面上,堆栈空间是几兆字节,因此通常应将每个调用帧限制为几千字节(或几十千字节)。