下面的程序运行时哪里会出现错误

c语言中++,--(++i,i--)的区别 * 测试程序dev编译器中进行, 如有错误,请联系我,我会及时做出修改, 在c语言中,++、--的运算,单独成为一条语句时,为隐式的自加1,自减, 例: 单独出现以下某语句时 ++i; //表现为i=i+1; --i; //表示为i=i-1; i++; //表示为i=i+1; i--; //表现为i=i-1; 代码: 1. 后自加或自减运算 i... 阅读详情

1、下面的程序运行时哪里会出现错误:

struct S

{

    int i;

    int * p;

};

 

int main()

{

    S s;

    int * p = &s.i;

    p[0] = 4;

    p[1] = 3;

    s.p = p;

    s.p[1] = 1;

    s.p[0] = 2;

 

    return 0;

}

【题目解析】

这道题考的是对结构体内存使用情况的理解。在32位的操作系统中,int和指针类型的变量占用空间都是4个字节。在本题中 &s.i的值实际就是 &s的值,所以“int * p = &s.i”也就相当于把p指向了结构体s的地址的起始位置。如图1所示。


图1

假设 &s的值为0x12300,则p的值也是0x12300,p[0]指的是从0x12300开始的连续4个字节的空间,p[1]指的是从0x12304(注意!不是0x12301)开始的连续4个字节的空间。这样,p[0]也就相当于s.i,p[1]也就相当于s.p,分析到这一步,可以确定程序运行到“s.p=p;”这里不会出错。继续往下看。

在进行了“s.p=p;”的赋值之后,s.p指向的是s的首地址,此时s.p[0]相当于s.i,s.p[1]相当于s.p。

下一句“s.p[1]=1”执行过之后,此时s.p的值为1,也就是指向内存的0x00001处,隐患出现了。在执行“s.p[0]=2”的时候,实际上是向内存0x00001起始的连续四个字节写入0x00000002,而那块内存不属于这个程序,会出现访问非法内存的错误。

VC解析的汇编代码如下(部分),有兴趣的可以参考一下。
;   14:       S s;
;   15:       int * p = &s.i;

00401028    lea         eax,[ebp-8]
0040102B    mov         dword ptr [ebp-0Ch],eax
;   16:       p[0] = 4;
0040102E    mov         ecx,dword ptr [ebp-0Ch]
00401031    mov         dword ptr [ecx],4
;   17:       p[1] = 3;
00401037    mov         edx,dword ptr [ebp-0Ch]
0040103A    mov         dword ptr [edx+4],3
;   18:       s.p = p;
00401041    mov         eax,dword ptr [ebp-0Ch]
00401044    mov         dword ptr [ebp-4],eax
;   19:       s.p[1] = 1;
00401047    mov         ecx,dword ptr [ebp-4]
0040104A    mov         dword ptr [ecx+4],1
;   20:       s.p[0] = 2;
00401051    mov         edx,dword ptr [ebp-4]
00401054    mov         dword ptr [edx],2
-------------------------------------------------------

78. 浅谈 ABAP 程序运行时出现『内存耗尽』错误的问题 Roll Area 是 ABAP 应用程序服务器中为每个 Internal Session 分配的互相隔离的内存区域。 ABAP 程序中消耗内存空间可变的部分(比如内表,字符串变量)在 Roll Area 区域进行管理,不可变的部分(比如 CONSTANT 关键字定义的常量)则存放在 PXA 区域中。Roll Area 可以进一步分为堆(Heap)区和堆(Stack)区,也就是我们经常提起的`堆栈`了。 阅读详情

相关推荐

解决程序运行错误的软件技巧与策略

动态链接库(Dynamic Link Library,DLL)是微软开发的一种库文件,它允许程序运行时共享代码和数据,实现模块化设计。DLL文件通常包含程序运行所需的各种函数、类或资源,以供其他应用程序动态链接。这种机制使得多个应用程序可以共享相同的代码,节省内存,并降低程序的总体大小。为了自动化和个性化软件更新流程,开发者和系统管理员常常需要编写自定义更新脚本。这些脚本可以根据实际需求调用相应的API或命令行工具。/bin/bash# 更新Node.js至最新版本。

weixin_28939623的博客 1512

while 里面 i-- 容易犯的错误

int i  = 8; while(i -- ) { } 退出循环时,i 等于 -1,这是因为最后一次不满足 while 条件时,

lizhihaoweiwei的专栏 1010

机器视觉检测到底怎么做,经验分享

笔者做机器视觉检测已经有五六年了,也算是对机器视觉的检测技术有了一定的掌握。总的来说,基于机器视觉的检测技术主要包含三个部分:视觉采集模块、后台分析模块和动作决策模块。这几个分类,跟教科书上的有较大差异,很多同学觉得我在杜撰。笔者也不作反驳,因为这是笔者这些年工作经验的总结,自然区别于教科书。下面我们分开来讲这几个模块,同时会把笔者之前的论文做个推荐总结。 所有文章均可在博主的主页中找到,若无法找到,可以用搜索工具。博主的主页: https://blog.youkuaiyun.com/Aoulun 第..

Aoulun的博客 8676

C#/.NET 【已解决】由于 .NET 运行时中出现内部错误,进程终止 位于 IP 6843D908 (682A0000),退出代码为 80131506

应用程序: xxxx.exe Framework 版本: v4.0.30319 说明: 由于 .NET 运行时中出现内部错误,进程终止 位于 IP 6843D908 (682A0000),退出代码为 80131506。 解决:配置文件runtime节下面加上<gcConcurrent enabled="false"/> ...

老陈聊架构 1万+

华北理工大学以升实验班蓝桥杯选拔赛题解

文章目录华北理工大学以升实验班蓝桥杯选拔赛题解A:期末考试题目描述题目讲解代码B:月份题目描述题目讲解代码C:打饭题目描述题目讲解代码D : 正弦波信号题目描述题目讲解代码E : 亲爱的长方形题目描述题目讲解代码F:挖金子题目描述题目讲解代码G : 金金的游戏题目描述题目讲解代码H : 区间和题目描述题目讲解代码详细视频讲解请关注华北理工大学b站账号。 华北理工大学以升实验班蓝桥杯选拔赛题解 A:期末考试 题目描述 Description 期末考试过去许多天了,如今成绩都出来了,那么现在让我们对成绩我分个类

Qq1739206233的博客 1127

图学习——04.HAN(异构图注意力网络)

什么是异构图,什么是元路径,什么是HAN,怎么计算attention,节点级别的attention和语义级别的attention

m0_51474171的博客 2999

错误模块路径: ...\v4.0.30319\clr.dll,v4.0.30319 .NET 运行时中出现内部错误,进程终止,退出代码为 80131506。

1. 错误模块路径: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 2. Framework 版本: v4.0.30319 .NET 运行时中出现内部错误,进程终止 位于 IP 71BE9E2C (71B80000),退出代码为 80131506。 3. 4.0.30319 说明(71B80000),退出代码为 80131506。 4. 这台计算机中已经安装了 .NET Framework 4.5.2 或版本更高的更新

weixin_44400900的博客 9364

电荷灵敏前置放大器噪声优化策略:从理论到实践

本文深入探讨了电荷灵敏前置放大器的噪声优化策略,从理论分析到实践应用。文章系统解析了并联电流噪声与串联电压噪声的来源,并引入噪声等效原理与“冷电容”模型作为统一分析工具。通过详解a、b、c三类噪声的频谱特性,为实战优化提供了清晰指导。核心策略包括选用高跨导、低漏电流FET,优化静态工作点,采用共源-共基结构,精心设计反馈网络,以及实施严格的PCB布局、屏蔽与接地,旨在全面提升微弱信号检测系统的信噪比。

weixin_29292431的博客 466

“System.AccessViolationException”类型的未经处理的异常在 未知模块。 中发生 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

查看windows日志提示如下: Framework 版本: v4.0.30319 说明: 由于 .NET 运行时中出现内部错误,进程终止 位于 IP 000007FEEF0A01FD 。 网上查找的问题说跟托管堆有关系,手动gc也没能解决, 最后参考https://stackoverflow.com/questions/4367664/application-crashes-with-internal-error-in-the-net-runtime 在配置文件中加入 <gcConcu..

DASHENPU的博客 5183

VMware桥接模式实战:用手机热点给Linux虚拟机共享网络(附WiFi适配技巧)

本文详细介绍了在移动办公场景下,如何为VMware中的Linux虚拟机配置桥接模式,以通过手机热点共享网络。文章深入解析了桥接模式在无线环境下的工作原理,提供了从主机端准备、VMware设置到Linux虚拟机内部配置的完整实战步骤,并针对手机热点的特殊性,分享了MTU优化、DNS配置及常见网络问题的诊断与解决方案,帮助用户实现稳定高效的移动虚拟化办公。

2y3u4i5o6p的博客 1194

逆向工程实战:如何用Frida和IDA破解AppleAccount的X-MMe-Nas-Qualify签名机制

本文通过逆向工程实战,详细解析了如何利用Frida动态Hook和IDA静态分析技术,破解AppleAccount服务中关键的X-MMe-Nas-Qualify签名机制。文章从环境搭建、动态追踪NSMutableURLRequest的签名注入点开始,逐步深入到AuthKit框架的静态剖析与算法还原,最终实现独立的签名生成,为安全研究和自动化测试提供了完整的技术路径。

bush的博客 696

Anaconda 打开时突然出现下面错误的处理方法

本人喜欢用大蟒蛇处理数据,不知道是不是习惯性的问题,一直坚持再用,感觉比较强大,但是突然有一天双击打开anaconda时出现了以下报错: Traceback (most recent call last): File “E:\Program Files\Anaconda\lib\sitepackages\psutil_pswindows.py”, line 620, in wrapperre...

学习python 1万+

【银河麒麟桌面系统】自定义ISO镜像操作实践

本文详细介绍了麒麟操作系统Kylin-Desktop-V10-SP1的ISO镜像定制流程。通过挂载原始镜像、解压文件系统、进入chroot环境进行系统定制(包括文件替换和软件管理),最终重构squashfs并生成新ISO。关键步骤包括:挂载镜像到mnt目录、解压filesystem.squashfs、替换源配置文件、在chroot环境中清理系统、重新生成squashfs文件以及使用mkisofs命令创建新镜像。文章特别标注了x86和ARM架构的不同命令参数,并提供了安装测试验证方法。整个过程展示了从原始镜像

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2340

java 程序运行出错_java 程序运行错误怎么办?

展开全部看是发生了什么错误,大多数错误都可以通过改写原编码来解决。程序的错误可以抽象分为三32313133353236313431303231363533e78988e69d8331333365633938类:语法错误、运行错误和逻辑错误。1、语法错误是指由于编程中输入不符合语法规则而产生的。程序编译就通不过,程序不能运行起来。此类错误最简单,调试起来比较容易例如:表达式不完整、缺少必要的标点符号...

weixin_42524883的博客 3556

SOME/IP协议详解「2.1.2·Payload数据类型序列化」

SOME/IP协议详解「2.1.2·Payload数据类型序列化」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.1.2·Payload数据类型序列化」1 大小端问题2 数据对齐填充问题3 都有哪些数据类型 之前简单的概括了一下序列化/反序列化,就是降维打击,从这一章开始到2.1所有章节结束,都在讲解这个降维打击的详细规则与原理 1 大小端问题 首先什么是大小端: 大端:高字节存放到内存的低地址 小端:高字节存放到内存的高地址 假如有一个数据是0x12345678

雪云飞星的博客 4624

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ISE中启动modelsim时出现了下面的错误

1。我在ISE中启动modelsim时出现了下面的错误 Loading work.tb_ic1_func # ** Error: (vsim-19) Failed to access library 'xilinxcorelib_ver' at "xilinxcorelib_ver". # No such file or directory. (errno = ENOENT) # ** E

Sun19910114的专栏 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用Python实现自动化邮件通知:当长时程序运行结束时

使用Python实现自动化邮件通知:当长时程序运行结束时

LucianaiB的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

PowerBuilder 程序运行时的错误捕获

写在systemerror事件中 String ls_ErrMsg Choose Case error.number Case 1 ls_ErrMsg = "被零除" Case 2 ls_ErrMsg = "引用空对象" Case 3 ls_ErrMsg = "数组越界" Case 4 ls_ErrMsg = "枚举值超出函数范围" Case 5 ls_ErrMsg...

weixin_37914760的博客 1586

如何在VSCode中快速定位并解决量子程序运行时错误?

掌握VSCode量子作业的错误处理技巧,快速定位并解决量子程序运行时错误。适用于Q#编程和量子算法调试,结合输出日志与断点调试,提升开发效率。问题排查更精准,值得收藏。

AlgoChat的博客 888

程序运行时的错误

2.运行时异常(在控制台打印 出*****Exception)异常的分类:1.编译时异常(写代码的时候会有红色波浪线Alt+回车处理)异常它是一个类 程序遇到什么问题找到相应的异常类打印到控制台。程序运行不出来: 1.错误 2.异常。

zfly2128的博客 62

程序运行时错误“类型初始值设定项引发异常”问题 解决方法:

程序运行时错误“类型初始值设定项引发异常”问题 解决方法: 出现这种错误的另两种情况,这也是在网上看到的,一起写下来。 一、Web.config配置错误。 在DALFactory程序集里的DataAccess类里,通过 private static readonly string path = ConfigurationManager.AppSet...

weixin_33721427的博客 2877

GDB程序运行时的参数设置

本博客(http://blog.youkuaiyun.com/livelylittlefish)贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! GDB程序运行时的参数设置  0. 引子我们在编程中,有时需要在程序启动/运行时指定参数,例如最常见的main函数。如果我们想用gdb调试程序时,该如何输入参数?这就是本文要讨论的内容。 1. 实验该程

学习,思考,记录,分享。 1万+

使用qq输入法,vs程序运行时产生错误

使用qq输入法,vs程序运行时产生错误 1.12345678912346 libpng warning: iCCP: known incorrect sRGB profile libpng warning: iCCP: known incorrect sRGB profile libpng warning: iCCP: known incorrect sRGB profile libpng war...

qq_25212845的博客 376

VB程序运行时产生的错误号码的中文解释

VB程序运行时产生的错误号码的中文解释3没有返回的GoSub5无效的过程调用6溢出7内存不足9数组索引超出范围10此数组为固定的或暂时锁定11除以零13类型不符合14字符串空间不足16表达式太复杂17不能完成所要求的操作18发生用户中断20没有恢复的错误28堆栈空间不足35没有定义 子程序、函数,或属性47DLL 应用程序的客户端过多48装入 DLL 时发生错误49DLL 调用规格错误51内部

chenjl1031的专栏 5504

段错误:程序运行时的致命打击

在计算机编程的世界里,“段错误”(Segmentation Fault)是一个让许多开发者闻之色变的问题。它是一种特定类型的运行时错误,通常出现在程序试图访问其无权访问或不存在的内存区域时。本文将深入探讨段错误的概念、产生原因,并通过实例进行详细解析。

a_Loki的博客 1451

iOS程序运行时_OBJC_CLASS_错误以及线程错误

-- "_OBJC_CLASS_$_XXXXXX"错误解决方法: 1.查看target->build Phases中的copy Bundle Resources有没有xxxx的.m文件 可用搜索,如果有,删除 2.然后查询target->build Phases中的 Compile Sources中有没有xxxxx的.m文件,可用搜索,如果没有,添加上 !!!切记:添

Summer_shining的博客 1066
上一篇: 函数调用时参数压栈顺序的问题(转)
下一篇: 以原始套接字方式对网络数据进行捕获(转)
evers
博客等级 码龄24年 7粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值