为啥devc++程序运行正确返回不为0?而返回了一个特别大的数,详解。

news/2024/5/10 8:35:59/文章来源:https://blog.csdn.net/weixin_63381305/article/details/128438761

例如运行以下程序:

#include

#include typedef char ElemType;

typedef struct BiTNode{ char data; struct BiTNode *lchild; struct BiTNode *rchild; int DescNum;}BiTNode ,*BiTree;

void CreateBiTree(BiTree *T) { char ch; scanf("%c",&ch); if(ch==' '){ *T=NULL; } else { *T=(BiTNode*)malloc(sizeof(BiTNode*)); (*T)->data=ch; CreateBiTree(&(*T)->lchild) ; CreateBiTree(&(*T)->rchild) ; }}

void visit(char c){ printf("%c",c);}int PreOrderTraverse(BiTree T,int count){ int p; if(T) { p=count; visit(T->data); count=PreOrderTraverse(T->lchild,count); count=count+PreOrderTraverse(T->rchild,p);

T->DescNum=count; count=count+1; return count; }}

void ReadD(BiTree T){ if(T) { printf("%d",T->DescNum); ReadD(T->lchild); ReadD(T->rchild); }}

int main(){ BiTree T; int count=0; printf("请按先序遍历输入二叉树:"); CreateBiTree(&T); printf("先序遍历:\n"); PreOrderTraverse(T,count); printf("\n按先序遍历读取DescNum:\n"); ReadD(T); return 0;}

将会返回如下结果:8982d3d99ed049b6942856f5c329db84.png

 为什么会产生这样的问题呢?原因可能有如下几点:

1.返回值不为0说明你的程序在中途就触发了SIGSEGV信号挂了,根本没能执行到主函数结尾的return 0。出现这个问题的原因是你访问了非法内存,例如数组越界、解引用了未初始化的指针、多次释放同一地址的内存空间等,请仔细检查你的程序,可以通过gdb调试确定异常位置。

2.因为返回的是默认的主函数返回值的地址,代码段起始和末尾(即主函数返回值的地址,此处称“0地址”)之间是有一定间隔的,在程序地址段未用尽(所使用的地址在间隔以内)时,可以正常返回“0地址”,但是程序地址段用尽时(超出“0地址”时),返回此时被占用的“0地址”的内存地址。

那么如何解决此类问题呢?我推荐一个简单粗暴的方法:即优化你的算法,将数组删除必须要用数组的话注意不要越界,检查是否在使用未初始化的指针,不要多次释放同一地址的内存空间避免出错,关闭你正在运行的所有窗口重新打开一次。

希望以上内容对你有用,不当之处,务啬赐教!

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

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

相关文章

力扣(LeetCode)207. 课程表(C++)

拓扑排序 根据示例看出,课程表是否存在环,是问题的关键。这题的环,和数组、链表的环不一样,不好判,要转化成图判拓扑序列。 考虑向右和向左的方向,拓扑序列的所有边可以指向同一方向。 无环图进行重排序…

第一章:绪论

一、数据库系统概述 1、【单选题】记录内有结构,整体无结构,属于计算机发展过程的哪一阶段 正确答案: C 2、【单选题】数据库系统最小访问单位是 正确答案: C 3、【多选题】数据库管理系统提供的数据控制功能包括 正确答案&…

不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动

文章目录一、前言二、系列文章三、准备工作3.1 挑选I2C引脚3.2 测试设备:QMI8658C四、编写设备树节点4.1 查找MUX4.2 修改i2c1引脚配置4.2.1 修改前4.2.2 修改后五、编译、烧录dt.img5.1 烧录后效果六、编写test程序6.1 创建文件6.2 源码:Android.mk6.3 …

Docker常用操作命令总结(一)

文章目录一、Docker的应用场景二、Docker 的优点三、Docker 架构四、安装Docker1、更新 apt 包索引2、安装docker3、安装完成之后,运行命令sudo docker info,检查安装状态4、有可能,第一次需要手动启动服务.就需要执行下面的命令,…

图像处理:制作你的专属卡通头像和LOGO(圣诞节特别篇)

目录0 前言1 安装与贴图2 算法原理2.1 计算像素频率2.2 计算像素相对距离2.3 计算合适贴图3 配置功能4 使用:以圣诞老人为例0 前言 Tiler是一种使用各种其他较小图像平铺创建新图像的工具,它与其他马赛克工具不同,因为它可以适应多种形状、大…

基于Xlinx的时序分析与约束(5)----衍生时钟约束

衍生时钟约束语法 衍生时钟(Generated Clocks,又称为生成时钟)是指由设计中已有的主时钟通过倍频、分频或者相移等操作后产生的新的时钟信号,如由MMCM或PLL或由组合逻辑生成的倍、分频时钟信号。 衍生时钟约束必须指定时钟源&…

【正点原子I.MX6U-MINI移植篇】rootfs移植过程详解(三)

Linux三巨头己经完成了2个了,就剩最后一个rootfs(根文件系统)了,根文件系统的组成以及如何构建根文件系统是Liux移植的最后一步,根文件系统构建好以后就意味着我们己经拥有了一个完整的、可以运行的最小系统。以后我们…

程序员高手解决问题,都是从正确的提问开始

回顾各大技术网站、社区、问答,我们发现:真正的程序员高手都极度擅长提问。 好的提问不但能得到建设性的解决方案,更加能激发人们的好奇心、创造力和学习的动力。 毫不夸张地说,会提问的程序员一开口就赢了! 所以今…

QT基本组件与常用类

目录 一、设计师 Designer(掌握) 二、布局 Layout 2.1 布局的基本使用(掌握) 2.2 布局属性(掌握) 2.3 伸展器(掌握) 2.4 嵌套(掌握) 2.5 伸展与策略&#xff…

分布式缓存的四大痛点

目前开发中经常用到的缓存,是我们必不可缺的,他大大的提高了我们整个项目的响应速度和并发量。但是带来好处的同时,也给我们带了了新的问题:缓存穿透、缓存击穿、缓存雪崩以及缓存一致性这么四个问题,也是分布式缓存的…

IT大侦“碳”:VxRail的可持续法宝

环境Environmental      社会责任Social Responsibility      企业治理Corporate Governance      随着碳达峰、碳中和的逐步推进,越来越多的“大厂”或各行业的明星企业都开始重视自己的ESG报告,已然成为了商界新风尚。      可持续发展战略也与前沿技术密切相…

Java项目:Springboot体育器材管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 体育器材管理系统主要包含以下功能: 登录注册; 体育器材管理:显示器材表、显示价目表、显示供应商表&#x…

4.2、网络层提供的两种服务

1、面向连接的虚电路服务 虚电路服务的核心思想:可靠通信由网络自身来保证\color{red}可靠通信由网络自身来保证可靠通信由网络自身来保证 当两台计算机进行通信时,必须建立网络层的连接\color{red}网络层的连接网络层的连接----虚电路VC\color{red}虚…

Java+SpringBoot电影订票系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用技术后台:SpringBoot、Spring、Springmvc、Springdata、MySQL数据库、前台:FreeMarker、css、Javascript等,项目含有源码、论文、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍: 本系统主要的…

Hi,运维,你懂Java吗--No.4:JVM-概述

作为运维,你不一定要会写Java代码,但是一定要懂Java在生产跑起来之后的各种机制。 本文为《Hi,运维,你懂Java吗》系列文章 第四篇,敬请关注后续系列文章 欢迎关注 龙叔运维(公众号) 持续分享运…

筛法(线性筛,厄拉多塞筛)

在前前前前前前…的博客中,我们主要谈了欧拉筛和埃氏筛. 今天我们主要来聊一聊线性筛和厄拉多塞筛(其实和埃氏筛和欧拉筛本质上没区别哎).其实在这两种筛法中厄拉多塞筛最好懂(就连本蒟蒻一看代码就明白了…别看这个名字,容易糊弄人) 首先是厄拉多塞筛"粉墨登场"::…

某农业学校 算法设计与分析-第五次实验-回溯算法

1. 罗密欧与朱丽叶的迷宫问题 问题描述 罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个mn的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这mn个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿8 个方向进入未封闭的房间。罗…

深度学习常见概念字典(感知机、全连接层、激活函数、损失函数、反向传播、过拟合等)

这一章的所有内容均是为了进入深度学习具体的某某网络而准备的,简单但是非常有必要。 1. 神经网络(neural networks)的基本组成 1.1 神经元(neuron) 神经元(neuron) 是神经网络(n…

Djiango实现用户管理增删改成功能实战

1.0定义 前后端不分离模式 前后端分离是指前端页面看到的效果都是由后端控制,即后端渲染HTML页面,前端与后端的耦合度比较高 前后端分离模式 后端仅返回前端所需要的数据,不在渲染HTML页面,不在控制前端的效果,至…

CodeQL代码静态污点分析引擎排查漏洞模式

文章目录前言环境搭建1.1 codeql基础1.2 vscode插件1.3 生成数据库1.4 HelloWorldcodeql语法2.1 语法结构2.2 常用类库2.3 谓词介绍2.4 污点分析漏洞检测3.1 初步结果3.2 解决误报总结前言 对于代码审计的工作,最早期的安全人员会以人工审计的方式来审计项目代码&a…