当前位置: 代码迷 >> 综合 >> malloc导致的segmetation fault
  详细解决方案

malloc导致的segmetation fault

热度:34   发布时间:2023-11-26 18:27:03.0
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失败的原因可能是内存不足或者前面的程序出现了越界访问。

相关链接

  相关解决方案