C:在函数内声明的数组不能超过~8MB的内存.

C:在函数内声明的数组不能超过~8MB的内存.,第1张

概述我究竟做错了什么? 在Mac(2GB RAM)上使用 Eclipse时,我遇到了以下问题: 每当我尝试创建一个超过8384896字节的数组时,我就会出现分段错误.以下程序将执行: #include <stdio.h>main(){ 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.

如果你真的需要分配大的东西,你可以使用malloc在堆上这样做:

double *x = malloc(1048112 * sizeof(double));

请注意,通过此更改,sizeof(x)不再返回数组的大小,它返回double *的大小.如果你需要知道你的阵列有多大,你需要自己跟踪它.

并且,为了完整性,当您完成数据时,您将需要调用free,否则您将有一点内存泄漏:

free(x);
总结

以上是内存溢出为你收集整理的C:在函数声明的数组不能超过~8MB的内存.全部内容,希望文章能够帮你解决C:在函数内声明的数组不能超过~8MB的内存.所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1224402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存