嵌入式学习——C语言基础——day15

1. 段错误调试

1.1 打印法

        在可能出现错误的位置加入打印,前一句能够打印出来,后一句打印不出来,问题就可以定位到两次打印中间的代码

1.2 gbd调试法

        1. 编译代码时加入-g选项

             gcc filename.c -g

        2. 使用gdb调试生成的代码

             gdb a.out

        3. gdb调试命令

                l                   查看代码
                b 函数名/行号        设置断点
                r                   运行代码
                n                   单步运行
                c                   直接运行到下一处断点
                s                   进入函数内部调试
                p   变量名          查看变量对应的值
                q                   退出

1.3 core文件调试方法

        1. 配置core文件

ubuntu 产生core文件-CSDN博客文章浏览阅读251次。ubuntu 产生core文件https://blog.csdn.net/weixin_43847267/article/details/130546569?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169243011316800225536999%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169243011316800225536999&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-130546569-null-null.142%5Ev93%5EchatgptT3_2&utm_term=Ubuntu%E4%BA%A7%E7%94%9Fcore%E6%96%87%E4%BB%B6&spm=1018.2226.3001.4187        2. ulimit -c unlimited

        3. 编译代码加入-g选项

        4. 运行代码使其产生段错误,段错误产生后会生成一个包含错误信息的core文件

        5. gdb a.out core 找到错误产生的位置

        注意:打印法和gdb法可以调试任意错误,但core文件调试法只能调试段错误

2. 链表以及链表的增删改查

2.1 创建空链表

typedef struct node 
{
	int data;
	struct node *pnext;
}linknode;

linknode *createlinklist(void)
{
	linknode *ptmpnode = NULL;

	ptmpnode = malloc(sizeof(linknode));
	if (NULL == ptmpnode)
	{
		printf("malloc failed!\n");
		return NULL;
	}

	ptmpnode->pnext = NULL;

	return ptmpnode;
}

2.2 头插法

int insertheadlinklist(linknode *phead, int tmpdata)
{
	linknode *ptmpnode = NULL;

	ptmpnode = malloc(sizeof(linknode));
	if (NULL == ptmpnode)
	{
		printf("malloc failed!\n");
		return -1;
	}

	ptmpnode->data = tmpdata;
	ptmpnode->pnext = phead->pnext;
	phead->pnext = ptmpnode;

	return 0;
}

2.3  打印链表信息

int showlinklist(linknode *phead)
{
	linknode *ptmp = NULL;

	ptmp = phead->pnext;
	while (ptmp != NULL)
	{
		printf("%d ", ptmp->data);
		ptmp = ptmp->pnext;
	}
	printf("\n");

	return 0;
}

2.4 寻找链表中的元素

linknode *findlinklist(linknode *phead, int tmpdata)
{
	linknode *ptmpnode = NULL;

	ptmpnode = phead->pnext;
	while (ptmpnode != NULL)
	{
		if (ptmpnode->data == tmpdata)
		{
			return ptmpnode;
		}
		ptmpnode = ptmpnode->pnext;
	}
	
	return NULL;
}

2.5 链表元素的替换

int replacelinklist(linknode *phead, int oldata, int newdata)
{
	linknode *ptmpnode = NULL;

	ptmpnode = phead->pnext;
	while (ptmpnode != NULL)
	{
		if (ptmpnode->data == oldata)
		{
			ptmpnode->data = newdata;
		}
		ptmpnode = ptmpnode->pnext;
	}

	

2.6 头插法

int insertheadlinklist(linknode *phead, int tmpdata)
{
	linknode *ptmpnode = NULL;

	ptmpnode = malloc(sizeof(linknode));
	if (NULL == ptmpnode)
	{
		printf("malloc failed!\n");
		return -1;
	}

	ptmpnode->data = tmpdata;
	ptmpnode->pnext = phead->pnext;
	phead->pnext = ptmpnode;

	return 0;
}

2.7 尾插法

int inserttaillinklist(linknode *phead, int tmpdata)
{
	linknode *ptmpnode = NULL;
	linknode *plastnode = NULL;

	ptmpnode = malloc(sizeof(linknode));
	if (NULL == ptmpnode)
	{
		printf("malloc failed!\n");
		return -1;
	}

	ptmpnode->data = tmpdata;
	ptmpnode->pnext = NULL;

	plastnode = phead;
	while (plastnode->pnext != NULL)
	{
		plastnode = plastnode->pnext;
	}
	plastnode->pnext = ptmpnode;

	return 0;
}

2.8 链表的删除

int deletelinklist(linknode *phead, int tmpdata)
{
	linknode *ptmpnode = NULL;
	linknode *pprenode = NULL;

	pprenode = phead;
	ptmpnode = phead->pnext;

	while (ptmpnode != NULL)
	{
		if (ptmpnode->data == tmpdata)
		{
			pprenode->pnext = ptmpnode->pnext;
			free(ptmpnode);
			ptmpnode = pprenode->pnext;
		}
		else 
		{
			ptmpnode = ptmpnode->pnext;
			pprenode = pprenode->pnext;
		}
	}

	return 0;
}

2.9 链表的摧毁和回收

int destroylinklist(linknode **pphead)
{
	linknode *ptmpnode = NULL;
	linknode *pfreenode = NULL;

	ptmpnode = pfreenode = *pphead;
	while (ptmpnode != NULL)
	{
		ptmpnode = ptmpnode->pnext;
		free(pfreenode);
		pfreenode = ptmpnode;
	}
	*pphead = NULL;

	return 0;
}

2.10 链表的冒泡排序法

int bubblesortlinklist(linknode *phead)
{
	linknode *ptmpnode1 = NULL;
	linknode *ptmpnode2 = NULL;
	linknode *pend = NULL;
	int tmp = 0;

	while (1)
	{
		ptmpnode1 = phead->pnext;
		ptmpnode2 = phead->pnext->pnext;
		
		if (ptmpnode2 == pend)
		{
			break;
		}

		while (ptmpnode2 != pend)
		{
			if (ptmpnode1->data > ptmpnode2->data)
			{
				tmp = ptmpnode1->data;
				ptmpnode1->data = ptmpnode2->data;
				ptmpnode2->data = tmp;
			}

			ptmpnode1 = ptmpnode1->pnext;
			ptmpnode2 = ptmpnode2->pnext;
		}

		pend = ptmpnode1;
	}
	return 0;
}

2.11 链表的选择排序法

int selectsortlinklist(linknode *phead)
{
	linknode *pselectnode = NULL;
	linknode *pminnode = NULL;
	linknode *ptmpnode = NULL;
	int tmp;
	
	pselectnode = phead->pnext;
	while (pselectnode->pnext != NULL)
	{
		pminnode = pselectnode;
		ptmpnode = pselectnode->pnext;
		while (ptmpnode != NULL)
		{
			if (ptmpnode->data < pminnode->data)
			{
				pminnode = ptmpnode;
			}

			ptmpnode = ptmpnode->pnext;
		}
		if (pminnode != pselectnode)
		{
			tmp = pminnode->data;
			pminnode->data = pselectnode->data;
			pselectnode->data = tmp;
		}

		pselectnode = pselectnode->pnext;
	}

	return 0;
}

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

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

相关文章

mysql优化面试总结

mysql优化 和 mysql优化之索引 两篇文章有大量的实验性的内容&#xff0c;我暂时没时间理解&#xff0c;把八股部分总结到这篇文章中&#xff0c;方便记忆 我们为什么要对sql进行优化 我们开发项目上线初期&#xff0c;由于业务数据量相对较少&#xff0c;一些SQL的执行效率对…

实现同一份数据的各种镜像

一个数据集通过某个轴&#xff08;通常是垂直或水平轴&#xff09;的镜像对称。这可以通过简单的数学运算来实现。 如果想要通过一块数据生成四份&#xff0c;可以通过以下步骤&#xff1a; 下面是一个简单的示例&#xff0c;展示了如何通过垂直轴&#xff08;左右对称&#…

HCIP的学习(13)

第五章&#xff0c;重发布和路由策略 重发布 ​ 在路由协议的边界设备上&#xff0c;将某一种路由协议的路由信息引入到另一种路由协议中&#xff0c;这个操作被称为路由引入或者路由重分发。----技术本质为重发布。 条件 必须存在ASBR设备&#xff08;路由边界设备&#x…

VMware虚拟机提示内存不足

VMware虚拟机&#xff0c;k8s集群搭建内存不足的问题 疑问&#xff1a;我的电脑是8G8G双通道的内存&#xff0c;当我在搭建k8s集群时给master-2G内存&#xff0c;node1-3G内存&#xff0c;node2-3G内存&#xff1b; 当依次打开虚拟机到node2时VM提示“物理内存不足&#xff0c;…

Python-100-Days: Day11 Files and Exception

1.读取csv文件 读取文本文件时&#xff0c;需要在使用open函数时指定好带路径的文件名&#xff08;可以使用相对路径或绝对路径&#xff09;并将文件模式设置为r&#xff08;如果不指定&#xff0c;默认值也是r&#xff09;&#xff0c;然后通过encoding参数指定编码&#xf…

PTA|小字辈

题目 本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 输入格式&#xff1a; 输入在第一行给出家族人口总数 N&#xff08;不超过 100 000 的正整数&#xff09; —— 简单起见&#xff0c;我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号&#x…

JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式

技术栈 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 后端框架&#xff1a;Spring boot 4. 前端框架&#xff1a;VUE2 5. 电子班牌&#xff1a; Android 7.1 6. 小程序&#xff1a;原生开发 7. 多学校Saas 模式 电子班牌是一款智慧校园管理工具&#xf…

Java实现手机短信验证码(互亿无线)

互亿无线 互亿无线是一家提供电信类增值服务插件以及其他相关插件的公司&#xff0c;是中国移动、中国联通、中国电信三大运营商的战略合作伙伴与工信部认定的电信增值业务服务商。公司旗下运营三大业务平台&#xff1a;数字奖励营销活动平台、应用短信平台、营销短信平台。 官…

上网行为审计软件分享|三款热门上网行为监控软件推荐

“小王&#xff0c;去找一款软件给我们公司安上&#xff0c;你去搜上网行为审计软件&#xff0c;看看买哪家合适” 这是某公司老板交给助理的一项工作&#xff0c;原话是这样的。 可见其实这类软件大多是人还是比较陌生的。 上网行为审计软件顾名思义就是对上网行为也就是电…

04-22 周日 阿里云-瑶光上部署FastBuild过程(配置TLS、自定义辅助命令)

04-22 周日 阿里云-瑶光上部署FastBuild过程 时间版本修改人描述2024年4月22日14:18:59V0.1宋全恒新建文档2024年4月23日20:41:26V1.0宋全恒完成了基本流程的添加 简介 前提 准备两台服务&#xff0c;一台部署Docker&#xff0c;一台部署FastBuild的镜像容器服务所述的Docke…

落地企业业财一体化的关键能力和路径

在财务数字化的改革过程中&#xff0c;财务部门已经通过会计电算化、ERP、财务共享&#xff0c;基本实现业务财务流程拉通和财务运营效率的提升&#xff0c;接下来面临问题是如何通过构建业财一体化体系&#xff0c;进一步挖掘数字利用价值&#xff0c;为管理决策赋能。 但在业…

LLM应用-prompt提示:让大模型总结生成Mermaid流程图;充当角色输出

1、prompt提示让大模型总结生成Mermaid流程图 生成内容、总结文章让大模型Mermaid流程图展示&#xff1a; mermaid 美人鱼, 是一个类似 markdown&#xff0c;用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具&#xff0c;您可以在文档中嵌入一段 mermaid 文本来生成 …

国内如何下载TikTOK,手机刷机教程

最近很多玩家都来问怎么刷机&#xff1f;手机环境怎么搭建&#xff1f;这里给大家整理了苹果IOS刷机教程 1.iOS下载教程 &#xff1a; 步骤一&#xff1a;手机调试 苹果手机系统配置推荐&#xff1a;iPhone6S以上&#xff0c;16G。 注意&#xff1a;如果是选择购入二手手机…

Devin AI程序员是如何设计出来的

背景 Devin是一个能够执行复杂工程任务并与用户在软件开发项目上积极合作的自主人工智能软件工程师&#xff0c;它擅长planning、tool use、reflecting&#xff0c;碾压大部分初级开发。 设计思路 一、界面设计 先来看 Devin 的界面&#xff0c;左边是对话框&#xff0c;记…

C++笔记之调用PCL库显示PCD文件的点云

C++笔记之调用PCL库显示PCD文件的点云 —— 2024-05-05 杭州 code review! 文章目录 C++笔记之调用PCL库显示PCD文件的点云1.运行2.点云pcd文件github下载地址2.main.cpp3.CMakeLists.txt1.运行 2.点云pcd文件github下载地址 https://github.com/luolaihua/point-cloud-data-…

如果insightface/instantID安装失败怎么办(关于InsightFaceLoader_Zho节点的报错)

可能性有很多&#xff0c;但是今天帮朋友解决问题的时候又收集了一种新的思路。 首先&#xff0c;可以先按照这篇文章里边提到的方法去安装&#xff1a; 【全网最详细】ComfyUI下&#xff0c;Insightface安装指南-聚梦小课堂_insightface如何安装-CSDN博客 其次&#xff0c;…

牛客周赛 Round 41 C-F

C 小红的循环移位 思路&#xff1a; 一个数是不是四的倍数&#xff0c;只用看最后两位是否能够整除4即可。 #include <bits/stdc.h>using namespace std; const int N 1e6 5; typedef long long ll; typedef pair<ll, ll> pll; typedef array<ll, 3> p3;…

IP规划案例

整个OSPF环境IP基于172.16.0.0/16划分 172.16.0.0/16 先分成2个网段&#xff08;OSPF RIP&#xff09;&#xff0c;借1位172.16.0.0/17 ---OSPF 再按区域划分&#xff08;5个区域&#xff09;&#xff0c;借3位 172.16.0.0/20 ---Area 0 三个环回 MGRE 4个网…

京东工业优选商品详情API接口:解锁高效工业采购新体验

京东工业优选的商品详情API接口&#xff0c;允许开发者通过程序化的方式&#xff0c;快速获取平台上的商品详细信息。这些详细信息包括但不限于商品名称、价格、规格、库存、图片、评价等&#xff0c;为企业提供全方位的商品信息查询服务。 二、API接口的主要功能 实时查询&a…