c语言中分配一个很大的数组,运行时段错误-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

c语言中分配一个很大的数组,运行时段错误

2016-06-07 20:52:49 1900 1
int main(int argc, char const *argv[])
{
    int j;
    int a[100000000];

    for (j = 0; j < 100000000; ++j)
    {
        a[j] = j;
    }
    return 0;
}

运行结果:
Segmentation fault (core dumped)
编译时没有错误,这里错误是因为数组太大,导致栈空间不够吗?那一个程序允许的最大栈是多少呢

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:31:01

    栈内存一般而言由系统的约束和配置决定,一般来说默认的在1-8M每进程不等。linux和macosx一般可以用ulimit命令调节,但一般仍会受到操作系统的“硬限制”而不能想调多大调多大。

    关于系统栈:

    系统栈的目的,在于跟踪和追溯函数调用的历史。
    这里的函数尤其指每个函数都有功能上的意义,即打印出系统栈就能表示出程序有意义的功能分块。
    使用栈内存做算法,不是不好,不过和系统栈的惯例用法毕竟稍微有一点偏差。
    层级很深,但每个层级都很类似(单独提取出来,无甚分析价值)的深层搜索,无论是为了防止炸栈,还是为了保持调用栈的简洁可分析,都应当自己建立用户栈。
    关于栈内存:

    栈内存整批进、整批退,不存在碎片和管理问题,性能优于堆内存。
    但相应的代价就是:

    其一,比较少,寸土寸金;
    其二,函数结束(退栈)之后,栈顶退回函数执行前的位置,则函数中所有局部变量所在的栈内存落在栈外自然销毁。(重要)
    因此函数内的局部变量,只应当表示函数内部执行到了什么状态,绝对不能用作实质性的数据区域。
    例如:应当用局部变量表示缓冲区的下标、指针,但缓冲区本身绝对不应该开在栈上。
    数据区域要么从堆上分配获得指针,要么通过参数传递得到指针。
    事实上这里用全局变量也不是唯一的选择(至少全局变量在语义上还是不太好看)。也可以使用malloc()来做,获取按需分配内存的灵活性,不必事前规定一个“足够大的范围”:

    int n, i;
    int a, p;
    scanf("%d", &n);
    a = malloc(sizeof(int) * n);
    p = a;
    for (i=0; i{

    scanf("%d", p++);

    }
    题外话——“局部变量所在的栈内存区域自然销毁”这件事,坑死多少C程序员。这里不详细展开,但请一定小心不要撞这个常识性的错误,即:不要把任何局部变量的地址用return返回给调用者。

    0 0
相关问答

17

回答

教你如何简单将OSS bucket挂载成为阿里云ECS服务器本地盘

梦丫头 2017-02-17 14:01:12 38348浏览量 回答数 17

9

回答

阿里云ECS安装虚拟主机系统DirectAdmin开心版百分百成功的方法

hxs 2014-05-26 20:05:30 34881浏览量 回答数 9

10

回答

AMH5.0安装脚本顺便提醒是收费的每月5元。

是非良人 2014-08-31 15:13:27 21073浏览量 回答数 10

8

回答

阿里云服务器内网传输使用指南

任逍遥 2013-03-22 00:05:42 31228浏览量 回答数 8

3

回答

2020年05月编程排行榜-C语言继2015年,重新成为编程排行榜第一名

huc_逆天 2020-05-06 13:43:42 36766浏览量 回答数 3

5

回答

上传到OSS的文件md5hash值如何获取?!!

asker 2015-08-05 16:52:10 22296浏览量 回答数 5

14

回答

C语言基础 【精品问答合集】

我是管理员 2018-07-13 15:37:00 27042浏览量 回答数 14

10

回答

阿里云centos静默安装oracle

美味的小鱼 2014-08-12 14:23:44 30972浏览量 回答数 10

6

回答

安装scrapy时出错errorcommandgccfailedwithexitstatus1

wangjifeng 2015-06-01 21:04:27 19692浏览量 回答数 6

5

回答

C语言算法 【精品问答合集】

我是管理员 2018-07-13 15:51:28 27392浏览量 回答数 5
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载