嵌入式学习第十五天

内存管理:

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会内存泄露

(1)内存溢出:
    内存溢出也称为内存越界
(2)内存泄露:
    程序中malloc的空间没有被释放
(3)内存碎片:
    由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片

链表:

1.定义链表节点结构体:首先需要定义一个结构体来表示链表的节点,该结构体包含一个数据成员和一个指向下一个节点的指针。

2.创建链表节点:创建链表节点时,需要分配内存并初始化数据成员和指针。

3.在链表末尾插入节点:要在链表末尾插入一个节点,需要找到最后一个节点并修改其指针。

4.遍历链表:遍历链表时,从头节点开始,依次访问每个节点,直到到达链表的末尾。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef	int DataType;

typedef struct node 
{
	DataType Data;
	struct node *pNext;
}LinkNode;

LinkNode *CreateLinkList(void)
{
	LinkNode *pTmpNode = NULL;

	pTmpNode = malloc(sizeof(LinkNode));
	if (NULL == pTmpNode)
	{
		return NULL;
	}

	pTmpNode->pNext = NULL;
	
	return pTmpNode;
}

int InsertHeadLinkList(LinkNode *pHead, DataType TmpData)
{
	LinkNode *pTmpNode = NULL;

	pTmpNode = malloc(sizeof(LinkNode));
	if (NULL == pTmpNode)
	{
		return -1;
	}

	pTmpNode->Data = TmpData;
	pTmpNode->pNext = pHead->pNext;
	pHead->pNext = pTmpNode;

	return 0;
}

int ShowLinkList(LinkNode *pHead)
{
	LinkNode *pTmpNode = NULL;

	pTmpNode = pHead->pNext;
	while (pTmpNode != NULL)
	{
		printf("%d ", pTmpNode->Data);
		pTmpNode = pTmpNode->pNext;
	}
	printf("\n");

	return 0;
}

int ReplaceLinkList(LinkNode *pHead, DataType OldData, DataType NewData)
{
	LinkNode *pTmpNode = NULL;

	pTmpNode = pHead->pNext;
	while (pTmpNode != NULL)
	{
		if (pTmpNode->Data == OldData)
		{
			pTmpNode->Data = NewData;
		}
		pTmpNode = pTmpNode->pNext;
	}

	return 0;
}

int DeleteLinkList(LinkNode *pHead, DataType TmpData)
{
	LinkNode *pPreNode = NULL;
	LinkNode *pTmpNode = NULL;

	pTmpNode = pHead->pNext;
	pPreNode = pHead;
	
	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;
}

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;
}

int main(void)
{
	LinkNode *linklist = NULL;

	linklist = CreateLinkList();
	InsertHeadLinkList(linklist, 1);
	InsertHeadLinkList(linklist, 2);
	InsertHeadLinkList(linklist, 3);
	InsertHeadLinkList(linklist, 4);
	InsertHeadLinkList(linklist, 5);
	ShowLinkList(linklist);
	ReplaceLinkList(linklist, 5, 50);
	ReplaceLinkList(linklist, 1, 10);
	ShowLinkList(linklist);
	DeleteLinkList(linklist, 50);
	DeleteLinkList(linklist, 10);
	ShowLinkList(linklist);
	DestroyLinkList(&linklist);

	return 0;
}

作业:

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

 int InsertTailLinkList(LinkNode *pHead, DataType TmpData);

2.从终端接收一个字符串,将字符串倒置后输出

例如:"how are you" -> "you are how"

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

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

相关文章

【芯片设计- RTL 数字逻辑设计入门 番外篇 8.1 -- memory repair 详细介绍】

文章目录 memory repair 详细介绍Memory Repair 方法Memory Repair 过程举例memory repair 详细介绍 SoC (System on Chip) 的 Memory Repair 是一种技术,用于检测和修复内存中的损坏单元。由于SoC内部集成了大量的逻辑和存储单元,包括RAM(随机访问存储器)、ROM(只读存储…

使用 vite 配置请求代理

介绍vite vue官方提供的前端构建工具。 由两个部分组成 开发服务器&#xff1a;基于ES模块提供丰富的内建功能 构建指令&#xff1a;使用 Rollup 打包代码&#xff0c;提供预设配置 Rollup&#xff1a; Rollup 是一个 JavaScript 模块打包器&#xff0c;它可以将多个模块打包成…

UG949 适用于 FPGA 和 SoC 的UltraFast 设计方法指南

使用RTL创建设计 定义RTL设计层级 模块边界输出进行寄存 即寄存器输出&#xff0c;打一拍 IP的使用 AMBA AXI

BPF 管理器 bpfman 简介

1. 背景 Fedora 40 提案建议将 bpfman 作为默认的程序管理器 &#xff0c;开源项目 bpfman 可以实现对 eBPF 运行状态的深入了解&#xff0c;从而实现更轻松地管理 eBPF 程序&#xff08;包括加载、卸载、运行状态查看等&#xff09;。该提案还需要 Fedora 工程和指导委员会 (…

AIGC专题:从0到1精益创新 AIGC产品应用及商业化落地实践

今天分享的是AIGC系列深度研究报告&#xff1a;《AIGC专题&#xff1a;从0到1精益创新 AIGC产品应用及商业化落地实践》。 &#xff08;报告出品方&#xff1a;易点天下&#xff09; 报告共计&#xff1a;38页 企业内部增效-AI知识库 企业内部IT、运维、人力资源、行政等等日…

Unity 模板方法模式(实例详解)

文章目录 简介示例1&#xff1a;游戏关卡流程示例2&#xff1a;测试试卷类示例3&#xff1a;游戏场景构建流程示例4&#xff1a;游戏动画序列示例5&#xff1a;游戏对象初始化过程 简介 Unity中的模板方法模式是一种行为设计模式&#xff0c;它在父类中定义了一个算法的框架&a…

微软新的内部开发部门发现了第一个 Windows 12 版本

Windows 11 被证明让很多人有点失望&#xff0c;很多 Windows 10 用户认为没有理由升级。 这意味着有大量用户渴望一些大而令人印象深刻的东西——而这正是 Windows 12 所希望的。 无论您是 Windows 10 的忠实拥趸&#xff0c;还是渴望更新、更闪亮的 Windows 11 采用者&#x…

笔记本电脑Win11重装系统教程

在笔记本电脑Win11操作过程中&#xff0c;用户如果遇到很严重的系统问题&#xff0c;就可以重新正常的Win11系统&#xff0c;快速解决Win11系统问题。但是&#xff0c;部分新手用户不知道不知道如何操作才能给Win11笔记本电脑重装系统&#xff1f;以下小编分享笔记本电脑Win11重…

分布式事务(五)——基于本地消息和可靠消息的解决方案

系列目录&#xff1a; 《分布式事务&#xff08;一&#xff09;—— 事务的基本概念》 《分布式事务&#xff08;二&#xff09;—— CAP和Base理论》 《分布式事务&#xff08;三&#xff09;—— 两阶段提交解决方案&#xff08;2PC&#xff09;》 《分布式事务&#xff0…

安卓滚动视图ScrollView

<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:orientatio…

mybatisplus-多数据源配置

1. 流程 pom文件yml配置多数据源具体服务添加注解DS(“***”) 1.pom文件 <!--mybatis plus 起步依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</vers…

《苍穹外卖》电商实战项目实操笔记系列(P123~P184)【下】

史上最完整的《苍穹外卖》项目实操笔记系列【下篇】&#xff0c;跟视频的每一P对应&#xff0c;全系列10万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 上篇&#xff1a;P1~P65《苍穹外卖》项…

JavaWeb前端——HTML/CSS

HTML/CSS概述 HTML&#xff1a;学习标签&#xff0c;CSS&#xff1a;学习样式 HTML 1. 不区分大小写。 2. 属性可以使用单引号/双引号 3. 在记事本/编辑器中编写html语言&#xff0c;通过浏览器解析渲染语言 4. 语法结构松散&#xff08;编写时要尽量严谨&#xff09; VSc…

Vulnhub-RIPPER: 1渗透

文章目录 一、前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、rips的使用三、获取密码文件四、日志审查五、提权 一、前言 由于在做靶机的时候&#xff0c;涉及到的渗透思路是非常的广泛&#xff0c;所以在写文章的时候都是挑重点来写&#xff0c;尽量的不饶…

Ant Design Mini - 支付宝小程序官方推出的免费开源 UI 组件库,新增支持微信小程序,实用性大大增加

支付宝小程序官方的 UI 组件库开始支持运行在微信小程序上了&#xff0c;如果要开发这两家小程序平台&#xff0c;这套组件很合适。 Ant Design Mini 也简称 antd-mini &#xff0c;是一套运行在支付宝小程序的 UI 组件库&#xff0c;UI 设计遵循 Ant Design 规范&#xff0c;…

前端Vue select 下拉框详解以及监听事件

目录 简介 使用详解 演示示例 :key"option.value" :value"option.value" 区别 监听事件 简介 在 Vue 中&#xff0c;下拉框通常通过 <select> 元素与一系列的 <option> 元素来创建。Vue 的数据绑定和指令&#xff08;如 v-model 和 v-for…

color - 让你的输出带点颜色

color color 是一个可以让你输出带颜色文本的库。 安装 go get github.com/fatih/color示例 输出到控制台 // 这会直接输出到控制台 color.Cyan("Prints text in cyan.")// 每个调用末尾会自动加上换行 color.Blue("Prints %s in blue.", "text&…

composer常用命令

查看全局配置信息 composer config -gl 设置镜全局像地址 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 去掉-g&#xff0c;即表示只有当前项目使用该镜像 批量安装composer项目依赖 composer install 执行该命令后&#xff0c;会读取当…

1295584-83-6,NOTA 马来酰亚胺,可通过与铁离子结合增强MRI信号

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;1295584-83-6&#xff0c;NOTA Maleimide&#xff0c;NOTA Mal&#xff0c;NOTA马来酰亚胺 一、基本信息 产品简介&#xff1a;NOTA Maleimide has good water solubility and stability, which enables it to main…

不移其志,踏浪前行 | 北京智和信通召开2023年度工作总结大会

岁聿云暮&#xff0c;新元肇启&#xff0c;2024年1月24日&#xff0c;北京智和信通技术有限公司&#xff08;以下简称“北京智和信通”&#xff09;召开2023年度年终总结大会。会上&#xff0c;各部门负责人全面分析公司业务发展态势&#xff0c;各部门员工依次汇报主要工作情况…