加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

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

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

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

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

free(x);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读