int max = 1399469912;
int *arr = (int*) malloc((max+1) * sizeof(int));
arr[0] = 1;
这段代码会报错segmentation fault,然而将max变成4的时候就不会出现这个错误。
很显然,这是因为数组过大造成的段错误。
(造成段错误的原因:相关链接)
一:
这个问题中可能是因为int数据类型过小,因此可将int变为size_t
相关链接
二:
在malloc的时候是可能会malloc不成功的,继续执行就有了问题,因此可以在malloc之后检查是否malloc成功。
int *arr = malloc((max+1) * sizeof(int));
if (!arr) {
perror("malloc arr"); exit(EXIT_FAILURE); };
相关链接
三:
malloc失败的原因可能是内存不足或者前面的程序出现了越界访问。
相关链接