社区
C语言
帖子详情
gcc编译器对二维数组的大小有限制吗?
jovon
2014-09-06 10:03:39
用vi编辑器写c程序,main函数里定义一个a[1001][3000]的二维数组,编译过程没问题,运行时出现段错误。如果定义成a[1001][2000],程序能顺利运行。哪位大神能解释一下什么原因?
...全文
450
4
打赏
收藏
gcc编译器对二维数组的大小有限制吗?
用vi编辑器写c程序,main函数里定义一个a[1001][3000]的二维数组,编译过程没问题,运行时出现段错误。如果定义成a[1001][2000],程序能顺利运行。哪位大神能解释一下什么原因?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jovon
2014-09-06
打赏
举报
回复
解决了,改成全局变量就OK了。多谢二位指点!
Falleyes
2014-09-06
打赏
举报
回复
你自己算一下,如果是int数组,一个int是4个字节,这个数组你要分配1001*3000*4B的空间。 一般来说,不要分配这么大的二维数组,建议使用malloc动态分配,需要多少,分配多少。
brookmill
2014-09-06
打赏
举报
回复
改成全局变量或者静态局部变量应该就好了。 局部变量在栈上分配内存,栈内存相对有限,楼主的数组至少有几M,估计是把栈撑爆了
Falleyes
2014-09-06
打赏
举报
回复
理论上没有大小限制,主要是你的电脑限制。是否能够分配连续那么大的空间呢?
GCC
中零长数组与变长数组
前两天看程序,发现在某个函数中有下面这段程序: int n; //define a variable n int array[n]; //define an array with length n 在我所学的C语言知识中,这种数组的定义在编译时就应该有问题的,因为定义数组时,数组的长度必须要是一个大于0的整型字面值或定义为 const 的常量
【C语言】变长数组、函数与数组、
GCC
对C的扩展、变长数组的实现原理
变长数组使用与原理
C语言(第二十一天)
有一个比较迷惑的点,变长数组的意思是数组的
大小
是可以使用变量来指定的,在程序运行的时候,根。从输出的结果来看,每一行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以
二维数组
中的每个元素都是连续存放的。遗憾的是在VS2022上,虽然支持大部分C99的语法,没有支持C99中的变长数组,没法测试;在C99标准之前,C语言在创建数组的时候,数组
大小
的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组
大小
。
C语言
二维数组
详解(进阶实战):VLA、矩阵转置与经典面试题
上篇我们把
二维数组
的基础打扎实了。这篇直接上强度——C99 变长数组、矩阵转置实战,还有 4 道面试常考题,每一道都带逐行解析和思路拆解。坐稳了!
C++
二维数组
真相:内存连续性、指针退化与性能陷阱
二维数组
在C++中并非独立类型,而是
编译器
对连续内存块的语法糖封装;其本质是通过行优先布局实现的线性地址偏移(如matrix[i][j] → *(base + i*cols + j)),这决定了它必须在编译期确定列数、不支持动态尺寸,并天然具备CPU缓存友好性。相比vector
>这类指针数组结构,静态
二维数组
避免了多级解引用和内存碎片,使矩阵运算、游戏网格、算法竞赛等场景性能提升2~5倍。理解数组退化(传参时变为int(*)[N]而非int**)和内存对齐要求,是解决越界崩溃、调试失
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章