嵌入式学习——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;
}

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

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

相关文章

如何在已经安装好的PostgreSQL14中安装uuid 扩展

当前环境 PG14.8 LINUX 8.8 存在问题&#xff1a; 开发人员问&#xff0c;PG中&#xff0c;支持 生成UUID吗&#xff0c;具体是什么&#xff0c;答&#xff0c;类似这个函数 uuid_generate_v4() 看了一下&#xff0c; select uuid_generate_v4();会报错&#xff0…

C++之类与对象

1、类声明 2、共有、私有、保护成员。&#xff08;就比如说你一个变量是private的&#xff0c;然后在main函数中&#xff0c;就调用不了&#xff0c;只能在这个类.cpp中调用&#xff09; 3、数据抽象和封装 4、内联函数 内存体积会增大&#xff0c;以空间换时间&#xff1a;编…

CRM定义是什么?

CRM&#xff0c;即客户关系管理&#xff0c;是一种综合性的管理策略&#xff0c;旨在通过一系列技术手段和业务流程&#xff0c;建立、维护和优化企业与客户之间的关系。它不仅仅是一种技术工具&#xff0c;更是一种以客户为中心商业哲学&#xff0c;是现代企业提升竞争力、实现…

【极速前进】20240423-20240428:Phi-3、fDPO、TextSquare多模态合成数据、遵循准则而不是偏好标签、混合LoRA专家

一、Phi-3技术报告 论文地址&#xff1a;https://arxiv.org/pdf/2404.14219 ​ 发布了phi-3-mini&#xff0c;一个在3.3T token上训练的3.8B模型。在学术基准和内部测试中的效果都优于Mixtral 8*7B和GPT-3.5。此外&#xff0c;还发布了7B和14B模型phi-3-small和phi-3-medium。…

字节和旷视提出HiDiffusion,无需训练,只需要一行代码就可以提高 SD 生成图像的清晰度和生成速度。代码已开源。

字节和旷视提出HiDiffusion&#xff0c;无需训练&#xff0c;只需要一行代码就可以提高 SD 生成图像的清晰度和生成速度。代码已开源。 支持将图像生成的分辨率提高至40964096&#xff0c;同时将图像生成速度提升1.5至6倍。 支持所有 SD 模型同时也支持 SD 模型的下游模型&…

重装win11系统后找不到WiFi

由于电脑崩溃重装了系统&#xff0c;win11,装完之后WiFi图标不见了且网络适配器根本没有无线网络选项。 右键电脑》管理》网络适配器。 在刚装好系统时候并没有前两项&#xff0c;查了很多资料&#xff0c;比如 关机14s 重启&#xff0c;还有通过服务配置 WLAN AutoConfig 都…

windows 双网卡同时接入内外网

在公司使用wifi接入使用桌面云&#xff0c;但是公司wifi不能上外网&#xff0c;查资料不方便&#xff0c;通过手机同时接入外网。 同一台电脑设置同时连接内外网&#xff08;wifi或共享的网络&#xff09;_win7电脑同时使用手机和usb网卡使用wifi-CSDN博客 route print查看当前…

纯血鸿蒙APP实战开发——折叠屏扫描二维码方案

折叠屏扫描二维码方案 介绍 本示例介绍使用自定义界面扫码能力在折叠屏设备中实现折叠态切换适配。自定义界面扫码使用系统能力customScan&#xff0c;其提供相机流的初始化、启动扫码、识别、停止扫码、释放相机流资源等能力。折叠屏折叠状态通过监听display的foldStatusCha…

【网络编程】http协议

预备知识 什么是http协议 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一个应用层的协议&#xff0c;用于在网络中传输超文本&#xff08;如HTML文档&#xff09;。HTTP协议建立在TCP/IP协议之上&#xff0c;是Web浏览器和Web服务器…

Redis学习6——Redis分布式锁

引言 分布式锁 分布式锁&#xff08;Distributed Lock&#xff09;是一种用于分布式系统中实现互斥访问的机制&#xff0c;在分布式系统中&#xff0c;多个节点同时访问共享资源可能导致数据不一致或竞态条件的问题&#xff0c;分布式锁通过协调多个节点之间的访问&#xff0…

运动控制“MC_MoveVelocity“功能块详细应用介绍

1、运动控制单位u/s介绍 运动控制单位[u/s]介绍-CSDN博客文章浏览阅读91次。运动控制很多手册上会写这样的单位,这里的u是英文单词unit的缩写,也就是单位的意思,所以这里的单位不是微米/秒,也不是毫米/秒,这里是一个泛指,当我们的单位选择脉冲时,它就是脉冲/秒,也就是…

懒人网址导航源码v3.9源码及教程

懒人网址导航源码v3.9源码及教程 效果图使用方法部分源码领取源码下期更新预报 效果图 使用方法 测试环境 宝塔Nginx -Tengine2.2.3的PHP5.6 MySQL5.6.44为防止调试错误&#xff0c;建议使用测试环境运行的php与mysql版本首先用phpMyAdmin导入数据库文件db/db.sql 如果导入不…

25-ESP32-S3 内置的真随机数发生器(RNG)

ESP32-S3 内置的真随机数发生器&#xff08;RNG&#xff09;&#x1f60e; 引言 &#x1f4da; 在许多应用中&#xff0c;随机数发生器&#xff08;RNG&#xff09;是必不可少的。无论是在密码学&#x1f512;、游戏&#x1f3ae;、模拟&#x1f9ea;或其他领域&#xff0c;随…

初期Linux

一&#xff0c;系统分为 1.1window系统 个人 &#xff1a;win7&#xff0c;win8&#xff0c;Win10&#xff0c;Win11服务器版&#xff1a;window server 2003&#xff0c;window server 2008 1.2Linux系统 centos7redhatubantukali 1.3什么是Linux&#xff1f; Linux是基…

武汉星起航:精准布局,卓越服务——运营交付团队领跑亚马逊

在全球电商浪潮中&#xff0c;亚马逊平台以其独特的商业模式和全球化的市场布局&#xff0c;吸引了无数商家和创业者的目光。在这个充满机遇的市场中&#xff0c;武汉星起航电子商务有限公司凭借其专业的运营交付团队&#xff0c;以其独特的五对一服务体系和精准的战略布局&…

【从零开始学习Minio | 第一篇】快速介绍什么是Minio

前言&#xff1a; 在当今数字化时代&#xff0c;数据的存储和管理已经成为了企业发展中的关键一环。随着数据量的不断增长和数据安全性的日益受到重视&#xff0c;传统的数据存储解决方案往往面临着诸多挑战。为了应对这些挑战&#xff0c;云存储技术应运而生&#xff0c;并在…

【C++】滑动窗口:将x减到0的最小操作数

1.题目 2.算法思路 这个题目难在要转化一下才能用滑动窗口。 题意是需要在数组的前后两段区间进行解题&#xff0c;但同时对两段区间进行操作是比较困难的&#xff0c;我们可以将中间这段区间只和与nums_sum-x&#xff08;数组总和-x&#xff09;进行比较&#xff0c;这样就可…

【PCIE】基于PCIE4C的数据传输(四)——使用MSIX中断

基于PCIE4C的数据传输&#xff08;三&#xff09;——遗留中断与MSI中断 一文介绍了遗留中断与MSI中断两种中断方式的代码实现&#xff0c;本文继续基于Xilinx UltrascaleHBM VCU128开发板与linux&#xff08;RHEL8.9&#xff09;&#xff0c;介绍MSIX中断方式的代码实现。本文…

PDF文档如何签名?用Adobe信任的文档签名证书

为PDF文档电子签名的方式有多种多样&#xff0c;但并非所有方案都是可靠的。我们在市面看到的电子图章、电子印章等仅在文档中置入印章图片的方式&#xff0c;并不具有任何法律上的有效性&#xff0c;它只是显示印章的图形效果&#xff0c;随时可以被篡改、伪造。PDF文档如何签…

在QEMU上运行OpenSBI+Linux+Rootfs

在QEMU上运行OpenSBILinuxRootfs 1 编译QEMU2 安装交叉编译工具3 编译OpenSBI4 编译Linux5 创建根文件系统5.1 编译busybox5.2 创建目录结构5.3 制作文件系统镜像5.3.1 创建 ext2 文件5.3.2 将目录结构拷贝进 ext2 文件5.3.3 取消挂载 6 运行OpenSBILinuxRootfs 本文所使用的版…