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

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

编写用户帮助/操作手册指南

一个新系统,需要写用户操作手册,该从何下笔?本篇是一篇教你编写用户帮助/操作手册的指南~

pytester的博客 3万+

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

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

老陈聊架构 1万+

避坑指南:锐浪报表PictureBox打印图像常见的5大问题及解决方案

本文深入剖析了锐浪报表(Grid++Report)中PictureBox控件打印图像时常见的五大难题,包括图像源加载机制、拉伸失真、动态加载失败、跨平台兼容性及性能优化。文章提供了从原理理解到实战解决方案的完整指南,帮助开发者有效规避图像打印中的常见陷阱,确保报表输出的稳定与高质量。

water的专栏 1148

错误模块路径: ...\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

SEMI E40标准的加工任务状态模型(Process Job State Model)解析

半导体制造设备的自动化控制离不开对加工任务(Process Job)的精细管理。SEMI E40标准定义了加工任务的全生命周期状态模型。分层建模,支持嵌套与并发子状态,确保复杂流程的灵活控制。SEMI E40通过。

bengg123的博客 1772

“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

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

qq_31444421的博客 2万+

水与光的奇妙“切割之舞”:水导激光切割技术探秘

水导激光切割技术的诞生,是材料加工领域不断追求高精度、高质量加工的成果。传统激光切割技术在加工过程中,材料会因瞬间高温而产生热变形、热影响区大以及切割面粗糙等问题,这些弊端在对一些高精度、热敏性材料的加工中尤为突出 ,迫切需要一种新的技术来克服这些难题。水导激光切割技术的起源可以追溯到 20 世纪 80 年代。1986 年,德国公司 Aesculap-Werke AG 首次提出了将水流引入激光切割过程的创新想法,并制造出首代水导激光设备。不过,当时的技术尚处于雏形阶段,仅仅是在光纤出口添加了一小柱水流,激光

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1673

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

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

学习python 1万+

TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate

这篇被 ICLR 2026 接收的论文提出了一种名为TurboQuant的全新在线向量量化(Vector Quantization, VQ)算法。该研究的核心目标是解决大语言模型(LLM)在长上下文推理时面临的 KV Cache 显存消耗瓶颈,以及大规模向量数据库在近似最近邻检索中的存储与延迟问题。有别于现有技术,TurboQuant 是一种无需任何校准数据、无需训练的在线算法(Data-oblivious)。

c_cpp_csharp的专栏 118

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

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

weixin_42524883的博客 3556

2020年大连理工大学《单片机原理及应用》期末试卷

2020年大连理工大学《单片机原理及应用》期末试卷 此试卷为大连理工大学2020年《单片机原理及应用》期末试卷; 大连理工大学2020年《单片机原理及应用》期末试卷; 大连理工大学2020年《单片机原理及应用》期末试卷。 ...

无名何许人的博客 1478

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

LucianaiB的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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、付费专栏及课程。

余额充值