C:在函数内声明的数组不能超过~8MB的内存.
发布时间:2020-12-16 06:48:42 所属栏目:百科 来源:网络整理
导读:我究竟做错了什么? 在Mac(2GB RAM)上使用 Eclipse时,我遇到了以下问题: 每当我尝试创建一个超过8384896字节的数组时,我就会出现分段错误.以下程序将执行: #include stdio.hmain(){ double x[1048112]; printf("sizeof(x) = %li",sizeof(x));} 输出将是(如
我究竟做错了什么?
在Mac(2GB RAM)上使用 Eclipse时,我遇到了以下问题: 每当我尝试创建一个超过8384896字节的数组时,我就会出现分段错误.以下程序将执行: #include <stdio.h> main() { double x[1048112]; printf("sizeof(x) = %li",sizeof(x)); } 输出将是(如预期的那样): sizeof(x)= 8384896 但是增加x中的元素数量或在main()中创建其他变量会导致无法执行的程序和段错误.看起来我正在达到一些内存限制,我不明白为什么会发生这种情况. 解决方法
由于堆栈变量过大,这是一个
stack overflow.
如果你真的需要分配大的东西,你可以使用 double *x = malloc(1048112 * sizeof(double)); 请注意,通过此更改,sizeof(x)不再返回数组的大小,它返回double *的大小.如果你需要知道你的阵列有多大,你需要自己跟踪它. 并且,为了完整性,当您完成数据时,您将需要调用 free(x); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |