c语言中结构体类型只有,C语言中main()函数不要返回结构体类型(求助)

大家先看一下这段程序:

#include

typedef unsigned char bool;

typedef struct _person person;

struct _person {

bool sex;

};

person main() {

person xingwang;

xingwang.sex = 0;

return xingwang;

}

如此简单清晰的程序,您觉得会报错吗?如果您和我一样,感觉肯定不会报错,请继续看这段程序编译以后的汇编代码:

.file "struct.c"

.text

.globl main

.type main, @function

main:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

movl 8(%ebp), %eax

movb $0, -1(%ebp)

movzbl -1(%ebp), %edx

movb %dl, (%eax)

leave

ret $4

.size main, .-main

.ident "GCC: (GNU) 4.4.6 20110731 (Red Hat 4.4.6-3)"

.section .note.GNU-stack,"",@progbits

pushl %ebp 将当前的基址存储,函数退出时用

movl %esp, %ebp 当前函数的基址

subl $16, %esp 在栈中,分配16个字节来存储局部的变量

movl 8(%ebp), %eax 调用main()函数的地方,返回值会存储在这里。(很显然,没有函数调用main(),这个地址很不确定)

movb $0, -1(%ebp) 为xingwang.sex赋值

movzbl -1(%ebp), $edx

movb %dl, (%eax) 将xingwang赋值给eax指向的内存地址

问题就出在 movl 8(%ebp), %eax 这一行。使用GDB调试以后发现,%ebp+8这个位置的值是 0x1,也就是说函数最后的返回值要存储给0x1这个内存单元。很显然这个内存单元不是用户可以操作的。

原因是,根据ABI,当返回值为结构体类型时,返回值就存储在栈中。

所以,这个C程序最后运行时,会提示 段错误 或者 Segment Fault。

研究了好几天,也没研究出什么眉目,好像根据什么 calling conventions 和 ABI,有个约定,某些时候会把返回值存储在寄存器里,某些时候会存储在调用函数的栈中。有哪位大侠知道的,给指个路……多谢了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 两表两列数据对比_Oracle、PostgreSQL与Mysql数据写入性能对比

最近因为工作需要,需要对Oracle和Mysql写入性能进行对比,以前都是听说Mysql性能比Oracle不是一个级别,现在亲测后,不比不知道,一比吓一跳。。。追加PostgreSql性能测试数据测试场景本地电脑(单机),通过程序…

锐驰机器人的市场_【年终盘点】2020年,锐驰的王炸新品!

点击蓝字关注我哦辛苦付出、苦熬实干,换来了硕果累累、丰收成片。回首2020年,锐驰秉承着锐意进取、快速创新的理念,在自动化道路上不断探索,推出了多款智能自动化机器,现在着重介绍以下3款:异型插件机器人、…

c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...

gd工程职业技术学院毕业论文基于C语言的推箱子游戏设计Design of the push box Based on Combined Language作者姓名:学科专业: 应用电子技术学院(系部): 机电工程系指导教师:gd工程职业技术学院2013年1月摘要近年来随着科技的飞速…

学生管理系统c#语言代码,基于C#语言的学生管理系统的设计(ASP.NET2.0)

摘 要随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。学生管理系统是学校管理中不可少的一部分。而基于B/S架构的学生管理系统是方便学校管理,实行电子办公的必要组成部分&#xf…

异常信息_一个针对异常信息通知的springboot starter

前言作为后端开发者,项目上线之后难免会遇到各种问题,一个良好且及时的异常通知机制可以让我们在项目的维护上避免很多不必要的麻烦。本项目的开发愿景是为了给使用者在线上项目的问题排查方面能够带来帮助,简单配置,做到真正的开…

2使用教学_建水三中智能交互式液晶一体机设备投入使用

“张老师,一体机的使用会了吗?”“一体机在教学中好用吗?”“告别多年粉笔加黑板的教学方式,不用再吸入粉笔灰了。”2月25日清晨,建水三中的老师们议论纷纷,大家关注的是如何操作使用教室里安装的一体机。建…

数据结构折半查找算法C语言,数据结构C语言实现----折半查找

运行结果&#xff1a;代码如下&#xff1a;#include//数组初始化函数void Array_get(int array[],int max){printf("请输入一个数组&#xff0c;大小从低到高&#xff0c;各个数字间以空格隔开&#xff1a;");for (size_t i 0; i < max; i){scanf("%d"…

生活中的算法的实际举例_驾校学的技术,在实际生活中,你能运用自如吗?

学驾照的过程不用说&#xff0c;每一个经历过的人都有着刻骨铭心的记忆。很多人认为自己流了很多汗水&#xff0c;付出了很多精力在练车场上摸爬滚打&#xff0c;这下肯定把驾驶技术给夯实了&#xff0c;以后开车上路一点问题也没有。但是事情真的是这样吗&#xff0c;驾校学的…

c语言万年历设计背景,万年历设计报告

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#includechar* month_str[]{"January","February","March","April","May","June","July","August","September","Octob…

470p 更换固态硬盘_联想G510换固态硬盘遇到的问题

唉&#xff01;更正一下吧&#xff01;电脑识别光驱位机械硬盘没有成功&#xff0c;出现了新问题&#xff0c;偶尔能识别出来&#xff0c;通常情况下不能识别出来&#xff0c;正在寻找解决办法中.........现在对于刚发表的这篇文章&#xff0c;有点惭愧&#xff01;二更&#x…

linux指针赋值原子,x86_64处理器的指针赋值是原子操作吗?

如题&#xff0c; x86_64处理器的指针赋值是原子操作吗&#xff1f;说实话我很讨厌参与讨论那些似乎不确定东西&#xff0c;倒不是说我对未知不敬畏&#xff0c;而是参与讨论的人大多数都是似懂非懂&#xff0c;对&#xff0c;我说的不确定性指的是参与讨论的人的认知的不确定&…

tecplot批量导出图片_批量导出Excel图片,用这招,半分钟干的活别人一整天完不成...

上个星期&#xff0c;我的一个同学向我求助。她是公司的HR&#xff0c;老板让她把员工信息表中的照片导出到文件夹中&#xff0c;然后打包发送给行政部的文员打印出来。她公司有5000多人&#xff0c;她复制粘贴了整整一个上午&#xff0c;才导出了200多张照片&#xff0c;而且还…

android动画超出圆角,Android关于Glide的使用(高斯模糊、加载监听、圆角图片)

高斯模糊、加载监听、圆角图片这些相信大家都很熟悉&#xff0c;那如何实现这些效果&#xff0c;请大家参考本文进行学习。1、引用compile com.github.bumptech.glide:glide:3.7.02、加载图片2.1 基本加载Glide.with(context).load(url).into(imageView);2.2 设置加载中和加载失…

填充table_Excel Power Query | 向下填充的逆过程

上期内容给大家讲解了关于图表精品图表 | Excel绘制“带有阈值分割的条形图和棒棒图”的制作方法。本期给大家讲解一下关于Power Query的知识 。如下图&#xff0c;将下面的数据向下填充逆过程。即将左侧的数据转换至右侧的数据。如果是从右往左的话是直接向下填充即可&#xf…

android中拖拽浮动按钮,Android自定义view实现拖拽选择按钮

本文实例为大家分享了Android实现拖拽选择按钮的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下DragChooseDemo效果图Attributes属性(布局文件中的自定义属性)半径、文字大小、按钮个数注意配合使用&#xff0c;以达到最佳效果方法使用布局文件中的使用android:id&qu…

# 解析bt文件_磁力链接和BT种子使用方法

目前用的最多的是磁力链接和BT种子&#xff0c;不过好多人并不太会使用&#xff0c;因此写个教程给大家说明一下。何为磁力链接&#xff1a;简单地说&#xff0c;磁力链接是一种特殊链接&#xff0c;但是它与传统基于文件的位置或名称的普通链接(如http://xxx)不一样&#xff0…

easyexcel设置下拉选项不能覆盖_Wi-Fi经常掉线 这个设置要修改

在使用Wi-Fi的时候最大的问题是什么&#xff1f;小伙伴们肯定说&#xff0c;当然是掉线啦。Wi-Fi设备过多、路由器设置等问题造成的掉线断网问题咱们之前都说过了。有些小伙伴又反映自己的电脑在使用无线网络时&#xff0c;一段时间不用就会掉线&#xff0c;手机却一直连接很好…

google开源android工具,谷歌最强Android UI工具包霸榜Github,这份上手指南了解一下...

2019年&#xff0c;谷歌在I/O大会上公开开源了一个非捆绑工具包——Jetpack Compose&#xff0c;这是一个用于构建原生Android UI的现代化工具包。仅通过少量代码就能完成布局&#xff0c;且能够直接使用Kotlin来进行编写。Jetpack Compose工具包是围绕着composable函数来构建的…

重叠面积_重叠面积——动点产生的重叠面积问题

本文开始介绍重叠面积问题。顾名思义&#xff0c;此类问题主要是求两个几何图形的重叠部分的面积。解题的关键为画出图形&#xff0c;然后再表示面积。文中的中考真题选自以下地区&#xff1a;2019•资阳、2019•鸡西、2019黄冈【题1】(2019•资阳)在矩形ABCD中&#xff0c;连结…

鸿蒙os硬件要求,华为公布鸿蒙OS 2.0硬件安装要求:只要128K内存就能跑

9月10日下午&#xff0c;华为在东莞松山湖举办了2020开发者大会&#xff0c;鸿蒙OS 2.0正式发布。会后&#xff0c;华为软件部总裁王成录博士、华为软件部副总裁杨海松等接受了专访。谈及鸿蒙OS 2.0的规划&#xff0c;杨海松表示&#xff0c;大家非常期待的手机的Beta版本会在今…