当我想要定义设置1000000时,程序正在崩溃
当我想为SIZE
1.000.000 #define
,我的程序在启动main函数之前崩溃了,但是当我#define
为SIZE
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
你正在试验一些堆栈溢出 ,….你的调用堆栈中的本地调用帧通常应该很小(几千字节)
你不应该有这么大的局部变量。 使用malloc
或calloc
在堆中分配这样的大数组。 不要忘记测试他们没有失败。 阅读malloc(3)的文档,不要忘记free
这样一个堆分配的数组。 注意内存泄漏和缓冲区溢出 。 如果可用,请使用valgrind 。
在当前桌面上,堆栈空间是几兆字节,因此通常应将每个调用帧限制为几千字节(或几十千字节)。