在Linux上,有16 GB的RAM,为什么会出现以下段错误:
#include <stdlib.h>
#define N 44000
int main(void) {
long width = N*2 - 1;
int * c = (int *) calloc(width*N, sizeof(int));
c[N/2] = 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据GDB,问题来自c [N/2] = 1,但是原因是什么?
这可能是因为calloc的返回值为NULL.
框中的物理RAM量与使用calloc/malloc/realloc分配的内存量无直接关系.这更直接取决于您的流程可用的剩余虚拟内存量.