#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main() {
int val[100000000] ;
printf("%d", CHAR_BIT);
}
执行代码时,会出现“段错误”错误。我想这个错误意味着堆区域没有足够的内存。
答案 0 :(得分:11)
不,这不是堆问题,而是堆栈。你已经声明了一个局部变量,并且局部变量存在于堆栈中。
请尝试使用int *val = malloc(sizeof(int)*100000000);
。您可以通过检查是否(val != NULL)
来测试是否成功。
(当然,当你完成记忆后,你需要记得打电话给free(val)
。)
答案 1 :(得分:6)
在堆栈上分配数组。请尝试使用malloc
堆。
答案 2 :(得分:2)
默认情况下,线程的堆栈大小可能约为2兆字节。你试图在堆栈上分配更多,这会导致错误。
根据您的平台,您可以使用--stack
选项更改默认堆栈大小分配到ld
,但不建议这样做。在您的情况下,最好使用malloc()
。堆栈通常不应用于存储大型数据结构。