社区
C语言
帖子详情
请各位帮忙看看这个的原理
xingxing
2005-03-25 04:24:08
经常看代码,发现如下的代码
struct A
{
...
};
struct ATable
{
...
struct A handler[1];
};
然后可以通过ATable的handler[n]来访问A的列表元素,不知道是[1]为什么就可以实现列表?这是怎么分配内存的呢?
...全文
328
16
打赏
收藏
请各位帮忙看看这个的原理
经常看代码,发现如下的代码 struct A { ... }; struct ATable { ... struct A handler[1]; }; 然后可以通过ATable的handler[n]来访问A的列表元素,不知道是[1]为什么就可以实现列表?这是怎么分配内存的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Student02370236
2005-03-27
打赏
举报
回复
有些编译器不会通过这种用法,会出现段异常
mythlee
2005-03-27
打赏
举报
回复
这种代码并不那么危险,许多Windows,Linux的C程序都在使用这种方法,关键一点要知道自己在做什么。
zhousqy
2005-03-26
打赏
举报
回复
up
dongpy
2005-03-26
打赏
举报
回复
用mythlee(mythlee)的方法可以解决这个问题。
但是如果struct ATable在栈上分配内存的话,还是会出错,因为栈是向下生长的,而数组是向上生长
的。
dongpy
2005-03-26
打赏
举报
回复
数组访问越界了。
如果对handler[2]……handler[n]进行写入操作的话,会出错。
cssport2000
2005-03-26
打赏
举报
回复
建议不要用这么危险的代码啊
rocklabzhang
2005-03-26
打赏
举报
回复
up
HaiFen
2005-03-26
打赏
举报
回复
一般用在动态分配内存的场合,分配内存时,先分配足够存储N个handler的内存,就不会出现任何问题了!
zhousqy
2005-03-25
打赏
举报
回复
学习
mythlee
2005-03-25
打赏
举报
回复
它在创建 ATable 对象时使用的动态内存分配,假设需要 N 个 A的 ATable
则它应该用
atable=(struct ATable *)malloc(sizeof(struct ATable)+(N-1)*sizeof(struct A));
来创建该 ATable.
syliang2003
2005-03-25
打赏
举报
回复
数组越界了!~!
TangChin
2005-03-25
打赏
举报
回复
其实说白了就是指针引用而已,只是它用的空间不是显示的manlloc得到的
他的程序中肯定还有其他的一些刻意的内存安排。
lito_rat
2005-03-25
打赏
举报
回复
在linux下运行会出现段错误,数组越界
Flood1984
2005-03-25
打赏
举报
回复
但怎么保证struct A handler[0]后面的内存不被占用呢?
pcboyxhy
2005-03-25
打赏
举报
回复
很危险的代码
Michael_555
2005-03-25
打赏
举报
回复
struct A handler[1];利用C语言不做边界检查,handler[0]与越界的handler[2]……handler[n]将会存储在一个连续的空间内,相当于声明了struct A handler[n+1];
当然,这段代码的编写人已经明确知道handler[2]……handler[n]的空间不会被别的函数或变量使用。他这样做的目的,有可能使防止别人随意修改他的代码。
原码, 反码, 补码 计算和
原理
详解
论证部分如有不对的地方
请
各位牛人
帮忙
指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示...
Marin说PCB之orcad-capture
原理
图封装库的创建总结----01
小编我刚刚到公司,就收到美国分部同事JACK发的邮件,说是让我
帮忙
建几个新建物料的SYMBOL的
原理
图的封装库,我是真的会谢他,啥都找我去干,还好我之前利用周末的时候提前学了一下,不然我也不会搞这个了。
异步复位同步释放
原理
深度揭秘异步复位同步释放
原理
明天就放端午小长假了,提前祝大家节日快乐。腾讯官网已经给小编公众号开通了赞赏功能(在文章末尾),这个赞赏是针对原创作者的,目的是鼓励原创作者不断进行内容分享。 所以,各位...
亚马逊Listing翻新技术
原理
解析
相信各位卖家朋友们都看过很多遍了,不过不知道大家有没有去做一个深度化的提炼和思考,这个飞轮理论的核心到底是什么? 简单来说,飞轮理论的核心就是:亚马逊喜欢新品,希望有不断的新品进入他的平台,另外...
计算机组成
原理
-原码, 反码和补码
论证部分如有不对的地方
请
各位牛人
帮忙
指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制...
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章