嵌入式学习第十五天!(内存管理、链表)

1. 内存管理:

    1. malloc 

void *malloc(size_t size);

    功能:申请堆区空间

    参数:size:申请堆区空间的大小

    返回值:返回获得的空间的首地址,失败返回NULL

    2. free

void free(void *ptr);

    功能:释放堆区空间

    注意:

        1.free只能释放堆区空间

        2. 一个空间只能被free一次,对此free程序会崩溃

        3. malloc需要和free搭配使用,如果只有malloc没有free会内存泄露

    练习:要求申请堆区空间,将“hello world”存放到堆区空间,完成打印

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(void)
{char *p = NULL;p = malloc(16);if(p == NULL){printf("failed\n");return -1;}strcpy(p, "Hello World");printf("%s\n",p);free(p);return 0;
}

2. 内存溢出:

    内存溢出也称为内存越界

3. 内存泄露:

    程序中malloc的空间没有被释放

4. 内存碎片:

    由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片

1. 链表

        1. 链表的构建

typedef int DataType;typedef struct node
{DataType Data;struct node *pNext;
}LinkNode;LinkNode *CreateLinkList(void)
{LinkNode *pTmpNode = NULL;pTmpNode = malloc(sizeof(LinkNode));if(pTmpNode == NULL){return NULL;}pTmpNode->pNext = NULL;return pTmpNode;
}

        2. 链表的插入(头插法)

int InsertHeadLinkList(LinkNode * phead, DataType TmpData)
{LinkNode *pTmpNode = NULL;pTmpNode = malloc(sizeof(LinkNode));if(pTmpNode == NULL){return -1;}pTmpNode->Data = TmpData;pTmpNode->pNext = phead->pNext;phead->pNext = pTmpNode;return 0;
}

        3. 链表的输出

int ShowLinkList(LinkNode *phead)
{LinkNode *pTmpNode = NULL;pTmpNode = phead->pNext;while(pTmpNode != NULL){printf("%d ",pTmpNode->Data);pTmpNode = pTmpNode->pNext;}printf("\n");return 0;
}

        4. 链表值的替换

int ReplaceData(LinkNode *phead, int OldData, int NewData)
{LinkNode *pTmpNode = NULL;pTmpNode = phead->pNext;while(pTmpNode != NULL){if(pTmpNode->Data == OldData){pTmpNode->Data = NewData;}pTmpNode = pTmpNode->pNext;}return 0;
}

        5. 链表删除某个值

int DeleteLinkList(LinkNode *phead, DataType DeleteData)
{LinkNode *pPreNode = NULL;LinkNode *pTmpNode = NULL;pTmpNode = phead->pNext;pPreNode = phead;while(pTmpNode != NULL){if(pTmpNode->Data == DeleteData){pPreNode->pNext = pTmpNode->pNext;free(pTmpNode);pTmpNode = pPreNode->pNext;}else{pTmpNode = pTmpNode->pNext;pPreNode = pPreNode->pNext;}}
}

        6. 链表的释放

int DestoryLinkList(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;
}

作业:

        1. 封装函数在链表中实现尾插法

#include <stdio.h>
#include <stdlib.h>typedef int DataType;
typedef struct node
{DataType Data;struct node *pNext;
}LinkList;LinkList *CreatLinkList()
{LinkList *pTmpNode = NULL;pTmpNode = malloc(sizeof(LinkList));if(pTmpNode == NULL){return NULL;}pTmpNode->pNext = NULL;return pTmpNode;}int InsertTailLinkList(LinkList *pHead, DataType NewData)
{LinkList *pTmpNode = NULL;LinkList *pPotNode = NULL;pPotNode = pHead;pTmpNode = malloc(sizeof(LinkList));if(pTmpNode == NULL){return -1;}pTmpNode->Data = NewData;pTmpNode->pNext = NULL;while(pPotNode->pNext != NULL){pPotNode = pPotNode->pNext;}pPotNode->pNext = pTmpNode;return 0;}int ShowLinkList(LinkList *pHead)
{LinkList *pTmpNode = NULL;pTmpNode = pHead->pNext;while(pTmpNode != NULL){printf("%d ", pTmpNode->Data);pTmpNode = pTmpNode->pNext;}printf("\n");return 0;
}int DestoryLinkList(LinkList **pphead)
{LinkList *pTmpNode = NULL;LinkList *pFreeNode = NULL;pTmpNode = pFreeNode = *pphead;while(pTmpNode != NULL){pTmpNode = pTmpNode->pNext;free(pFreeNode);pFreeNode = pTmpNode;}*pphead = NULL;return 0;
}int main(void)
{LinkList *linklist = NULL;linklist = CreatLinkList();InsertTailLinkList(linklist, 1);InsertTailLinkList(linklist, 2);InsertTailLinkList(linklist, 3);InsertTailLinkList(linklist, 4);InsertTailLinkList(linklist, 5);ShowLinkList(linklist);DestoryLinkList(&linklist);
}

        2. 从终端接收一个字符,将字符串倒置后输出(用指针的方法):

                “how are you”  >  "you are how"

#include <stdio.h>int Reverse(char *pstr)
{char *phead = NULL;char *ptail = NULL;char tmp = 0;phead = ptail = pstr;while(*ptail != '\0'){ptail++;}ptail--;while(phead < ptail){tmp = *phead;*phead = *ptail;*ptail = tmp;phead++;ptail--;}return 0;
}int ReverseStr(char *pstr)
{char *phead = NULL;char *ptail = NULL;char *tmp1 = NULL;char *tmp2 = NULL;char tmp = 0;Reverse(pstr);phead = ptail = pstr;while(*pstr != '\0'){while(*ptail != ' ' && *ptail != '\0'){ptail++;}ptail--;tmp1 = phead;tmp2 = ptail;while(tmp1 < tmp2){tmp = *tmp1;*tmp1 = *tmp2;*tmp2 = tmp;tmp1++;tmp2--;}if (*ptail != '\0'){ptail = ptail + 2;phead = ptail;}else{break;}}}int main(void)
{char str[32] = "how are you";ReverseStr(str);printf("%s\n",str);return 0;
}

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

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

相关文章

volatile 关键字的用法说明

volatile字面翻译为不稳定的&#xff0c;易变的。 一般编译器优化时&#xff0c;如果一个数据已经读取进寄存器&#xff0c;后续会优先从寄存器中取值来减少访问存储时间&#xff0c;但如果此数值会随时变动&#xff0c;结果就会出现错误 以下测试 #include <stdio.h> i…

信效度检验2(SPSS

目录 1.效度介绍&#xff1a;2.效度检验&#xff1a;小结&#xff1a; 1.效度介绍&#xff1a; 用于研究题项设计是否合适 2.效度检验&#xff1a; 点击 降维->因子 把涉及到因变量的问题放入即可&#xff1a; 勾选&#xff1a; 得到输出结果&#xff1a; KMO值 0.7…

C语言实战三:图书管理系统

这个图书管理系统包括了添加、查找、删除、编辑、显示和保存书籍信息的功能。书籍信息被保存在一个文本文件中&#xff0c;在程序启动时从文件中加载&#xff0c;退出程序时保存到文件中。用户可以通过命令行界面操作图书管理系统&#xff0c;并进行相应的功能操作。 一、代码…

pg数据库替换指定ip

pg数据库替换指定ip 配菜单是部署机ip发生变化&#xff0c;记录一下处理方法,先根据源ip查询出主键id&#xff0c;在将源ip替换成目标ip updatesys_menu sethref replace(href, 10.116.63.4, 10.116.58.23) whereid in(select*fromsys_menuwherehref like %10.116.58.23% )

信息学奥赛一本通1931:【05NOIP普及组】校门外的树

1931&#xff1a;【05NOIP普及组】校门外的树 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9210 通过数: 6928 【题目描述】 某校大门外长度为L的马路上有一排树&#xff0c;每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴&#xff0c;马路的一…

24校招,快手测试开发工程师二面

前言 大家好&#xff0c;我是chowley&#xff0c;今天回顾一下&#xff0c;之前参加快手的校招面试 全程没有测试方向问题&#xff0c;一直拷打编程语言特性和数据底层结构 时间&#xff1a;50min 平台&#xff1a;轻雀&#xff08;请勿切屏&#xff09; 过程 自我介绍用…

如何使用wireshark解析二进制文件

目录 目录 1.将已有的packet raw data按照下面格式写入文本文件中 a. Raw IP packet b. Ethernet packet 2.用wiershark导入hex文件 3.设置对应的packet类型 a. Raw IP packet b. Ethernet packet 1.将已有的packet raw data按照下面格式写入文本文件中 a. Raw IP pac…

汽车燃油泵数据分析:全球市场的年复合增长率将达到10%左右

燃油泵是汽车配件行业的专业术语。是电喷汽车燃油喷射系统的基本组成之一&#xff0c;位于车辆油箱内部&#xff0c;燃油泵在启动和发动机运转时工作&#xff0c;如果发动机停止而点火开关仍处于ON时&#xff0c;HFM-SFI控制模块关闭燃油泵的电源&#xff0c;以避免意外点火。 …

OpenCV与机器学习:使用opencv实现KNN

使用opencv实现KNN 前言OpenCV实现KNN生成随机数据使用matplotlib绘制数据OpenCV用于KNN训练生成新数据并观察预测 前言 KNN算法&#xff0c;即K-Nearest Neighbor&#xff0c;是一种简单的机器学习算法。它的基本思想是&#xff1a;如果一个样本在特征空间中的K个最相似&…

标注数据集 --labelimg

前言&#xff1a;我们想要训练自己的数据集时&#xff0c;通常需要自己标注数据集。无论是标注成yolo可识别的txt格式还是voc数据集的xml格式。使用labelimg标注都是一个不错的选择。 下面我们就从创建环境&#xff0c;使用labelimg进行标注两个方面来说明。 1.创建labelimg环境…

ADI 配合 USRP 使用的相控阵天线 cn0566

相控阵天线 在这里插入图片描述

Python实战:爬取微博,获取南京地铁每日客流数据

在这篇文章中&#xff0c;我们将使用 Python 进行网络爬虫&#xff0c;爬取微博上的南京地铁每日客流数据。 一、分析网页 在“南京地铁”微博主页搜索“昨日客流”关键词&#xff0c;搜索到每天发布的昨日客流数据。 “南京地铁”微博主页地址https://weibo.com/u/26382762…

基于视觉的移载协作机器人机床上下料末端纠偏算法

摘 要 针对复合机器人在机床上下料中的定位方法,本文主要关注识别机床卡盘和末端作业面的定位。首先分 析了复合机器人在机床上下料过程中的工作原理及其基本结构,包括 AGV (自动导引车)和协作机器人 的功能及特点。然后,详细阐述了如何使用视觉系统和纠偏算法来…

京东采销急眼,隔空喊话“针对”拼多多,焦虑之下为哪般?

农历新年将至&#xff0c;无论是线下各大商超还是线上电商平台&#xff0c;皆为年终大促而“忙的不亦乐乎”&#xff0c;尤其是近期发生的京东采销人员在直播间向拼多多喊话&#xff0c;“恳请拼多多停止屏蔽&#xff0c;恳请拼多多直接比价”&#xff0c;更是将年底这场朴实无…

flink cdc,standalone模式下,任务运行一段时间taskmanager挂掉

在使用flink cdc&#xff0c;配置任务运行&#xff0c;过了几天后&#xff0c;任务无故取消&#xff0c;超时&#xff0c;导致taskmanager挂掉&#xff0c;相关异常如下&#xff1a; 异常1&#xff1a; did not react to cancelling signal interrupting; it is stuck for 30 s…

ElasticSearch基础用法

什么是ElasticSearch? Elasticsearch是一个开源的、分布式的、实时的搜索和分析引擎。它允许用户近乎实时地存储、检索大量数据&#xff0c;并能够高效地对其进行全文搜索、聚合和分析。 部署ES和Kibana 通常采用docker-compose部署ES&#xff08;ElasticSearch&#xff09;服…

react-jss书写样式 与 react-intl 国际化的使用 与 classnames 动态css的使用

目录 react-jss的使用react-intl 国际化的使用App.tsxIntlProvider 配置ConfigProvider组件/router/indexlocaleslocales / zh.json || en.json 组件中使用 国际化 classnames 动态css的使用 react-jss的使用 实现组件化样式、动态样式、避免样式冲突 npm install react-jss …

React 组件中怎么做事件代理

在 React 组件中使用事件代理可以使用以下方法&#xff1a; 使用 on 方法来绑定事件监听器&#xff1a; class MyComponent extends React.Component {handleClick(event) {if (event.target.tagName BUTTON) {console.log(Button clicked);}}render() {return (<div onC…

如何写好论文——(3)研究选题的三种途径

一、填补研究空白——创新 在前人的研究基础上发现问题、提出创新&#xff0c;在技术上具有挑战性 关键&#xff1a;提出我们在课题上创新的部分&#xff0c;它可能是新的解决方案&#xff0c;从其他领域借鉴过来的新的想法 因为它是老问题&#xff0c;所以需要研究前人已经…

速盾:服务器高防CDN能防御哪些网络攻击

摘要&#xff1a;本文将探讨服务器高防CDN的技术&#xff0c;以及它可以有效防御哪些网络攻击。我们将介绍DDoS攻击、CC攻击、恶意爬虫等常见网络攻击&#xff0c;并说明服务器高防CDN通过其强大的防御技术如高防IP、智能分流等如何应对这些攻击。此外&#xff0c;我们还将回答…