内存泄漏检测、单向链表的操作

news2024/11/29 10:34:16

我要成为嵌入式高手之3月19日数据结构第二天!!
————————————————————————————

valgrind内存测试工具

让虚拟机上网、在虚拟机上下载软件,参考笔记:

我要成为嵌入式高手之2月3日Linux高编第一天!!-CSDN博客

上图表示申请了10个空间,释放了10个空间,没有内存泄漏

上图申请了11个空间,释放了10个空间,存在内存泄漏(leaked memory) 

 单向链表逆序

#include "head.h"

LINK_LIST *CreateLink()
{
    LINK_LIST *plist = malloc(sizeof(LINK_LIST));
    if (NULL == plist)
    {
        perror("fail to malloc");
        return NULL;
    }

    plist->phead = NULL;
    plist->clen = 0;

    return plist;
}

int LinkSearch(LINK_LIST *plist)
{
    LINK_NODE *ptmp = plist->phead;

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

    printf("len = %d\n", plist->clen);

    return 0;
}

int PushTailLink(LINK_LIST *plist, DATA_TYPE data)
{
    LINK_NODE *ptmp = plist->phead;

    LINK_NODE *pnode = malloc(sizeof(LINK_NODE));
    if (NULL == pnode)
    {
        perror("fail to malloc pnode");
        return -1;
    }

    pnode->data = data;
    pnode->pnext = NULL;

    if (plist->phead == NULL)
    {
        plist->phead = pnode;
    }
    else
    {
        while (ptmp->pnext != NULL)
        {
            ptmp = ptmp->pnext;
        }
        ptmp->pnext = pnode;
        plist->clen++;
    }

    return 0;
}

int ReverseLink(LINK_LIST *plist)
{
    if (plist->phead == NULL)
    {
        return -1;
    }

    LINK_NODE *ptmp = plist->phead;
    plist->phead = NULL;
    
    LINK_NODE *pinsert = NULL;
    
    while (ptmp != NULL)
    {
        pinsert = ptmp;
        ptmp = ptmp->pnext;
  
        pinsert->pnext = plist->phead;
        plist->phead = pinsert;
    }
    
    return 0;
}

int main()
{
    LINK_LIST *plist = NULL;

    plist = CreateLink();
    if (NULL == plist)
    {
        return -1;
    }

    PushTailLink(plist, 1);
    PushTailLink(plist, 2);
    PushTailLink(plist, 3);
    PushTailLink(plist, 4);
    PushTailLink(plist, 5);

    LinkSearch(plist);

    ReverseLink(plist);

    printf("=========================\n");
    LinkSearch(plist);

    return 0;
}

找单向链表的中间节点

 

LINK_NODE *SearchMidNode(LINK_LIST *plist)
{
    LINK_NODE *pfast = plist->phead;
    LINK_NODE *pslow = plist->phead;

    while (pfast != NULL)
    {
        pfast = pfast->pnext;
        if (NULL == pfast)
        {
            break;
        }
        pfast = pfast->pnext;
        pslow = pslow->pnext;

    }

    return pslow;
}

寻找链表倒数第K个结点

LINK_NODE *SearchReNoKNode(LINK_LIST *plist, int k)
{
	LINK_NODE *pfast = plist->phead;
	LINK_NODE *pslow = pfast;
    int i = 0;
	
    for (i = 0; i < k; i++)
	{
		if (NULL == pfast)
		{
			return NULL;
		}
		pfast = pfast->pnext;
	}

	while (pfast != NULL)
	{
		pfast = pfast->pnext;
		pslow = pslow->pnext;
	}
	
	return pslow;
}

删除指定数据的结点

int DeleteKNode(LINK_LIST *plist, int k)
{
    LINK_NODE *pfree = NULL;
    LINK_NODE *ptmp = NULL;

    pfree = plist->phead;
    ptmp = pfree;
    while (pfree != NULL)
    {
        if (pfree->data == k)
        {
            if (plist->phead == pfree)
            {
                plist->phead = pfree->pnext;
                free(pfree);
                plist->clen--;
                break;
            }
            else
            {
                ptmp->pnext = pfree->pnext;
                free(pfree);
                plist->clen--;
                break;
            }
        }
        else
        {
            ptmp = pfree;
            pfree = pfree->pnext;
        }
    }

    return 0;
}

 链表的插入排序

int InsertSort(LINK_LIST *plist)
{
    LINK_NODE *ptmp = NULL;
    LINK_NODE *pinsert = NULL;
    LINK_NODE *p = NULL;

    if (p == NULL || p->pnext == NULL)
    {
        return -1;
    }

    ptmp = plist->phead->pnext;
    plist->phead->pnext = NULL;
    pinsert = ptmp;

    while (ptmp != NULL)
    {
        pinsert = ptmp;
        ptmp = ptmp->pnext;

        if (pinsert->data <= plist->phead->data)
        {
            pinsert->pnext = plist->phead;
            plist->phead = pinsert;
        }
        else
        {
            LINK_NODE *p = plist->phead;
            while (p->pnext != NULL && p->pnext->data < pinsert->data)
            {
                p = p->pnext;
            }

            pinsert->pnext = p->pnext;
            p->pnext = pinsert;
        }
    }
    return 0;
}

 

                                                                                                                                                                                      

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

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

相关文章

React状态管理库快速上手-Redux(一)

基本使用 安装 pnpm install reduxjs/toolkit react-redux创建一个仓库 定义state createSlice相当于创建了一个模块仓库&#xff0c;initialState存放状态&#xff0c;reducers存放改变状态的方法。 import { createSlice } from reduxjs/toolkitexport const counterSli…

python与excel第一节

python与excel第一节 由于excel在日常办公中大量使用&#xff0c;我们工作中常常会面对高频次或者大量数据的情况。使用python语言可以更加便捷的处理excel。 python与vba的比较 python语法更加简洁&#xff0c;相较于vba冗长复杂的语法&#xff0c;python更加容易学习。 p…

长安链智能合约标准协议第二草案——BNS与DID协议邀请社区用户评审

长安链智能合约标准协议 在智能合约编写过程中&#xff0c;不同的产品及开发人员对业务理解和编程习惯不同&#xff0c;即使同一业务所编写的合约在具体实现上也可能有很大差异&#xff0c;在运维或业务对接中面临较大的学习和理解成本&#xff0c;现有公链合约协议规范又不能完…

【C++】Qt:WebSocket客户端示例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍WebSocket客户端示例。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

Python分析无人驾驶汽车在桂林市文旅行业推广的问卷

【项目背景】 通过市场调研、文本分析、访谈和问卷调查等方法&#xff0c;探讨&#xff1a; 网民对无人驾驶汽车出行服务的态度。无人驾驶安全员的行业背景。不同人群在旅游时的交通选择偏好。游客及当地居民对桂林市文旅路线的交通满意度。乘客对无人驾驶汽车的满意度。桂林…

X1 grok-1 开源大语言模型下载

Grok 前言 我们正在发布我们的大型语言模型 Grok-1 的基本模型权重和网络架构。Grok-1 是一个 3140 亿参数的专家混合模型&#xff0c;由 xAI 从头开始训练。 这是 2023 年 10 月结束的 Grok-1 预训练阶段的原始基础模型检查点。这意味着该模型不会针对任何特定应用&#xff…

C++特性三:多态的基本语法及原理剖析

一、多态的基本语法 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态&#xff0c;复用函数名 动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别&#xff1a; 静态多态的函数地址早绑定 - 编译阶段确定函数地址 动态多态的函数地址晚绑定 - 运…

GitHub Copilot+ESP开发实战-串口

上篇文章讲了GitHub Copilot在应用中可能遇到的问题&#xff0c;接下来小启就简单介绍下GitHub Copilot在ESP32开发中C语言实现串口功能&#xff0c;感兴趣的可以看看。 一、向Copilot提问&#xff1a; 1. ESP32用C语言实现串口初始化&#xff1b; 2.配置uart为1&#xff0c…

wayland(xdg_wm_base) + egl + opengles 使用 Assimp 加载带光照信息的材质文件Mtl 实现光照贴图的最简实例(十七)

文章目录 前言一、3d 立方体 model 属性相关文件1. cube1.obj2. cube1.Mtl3. 纹理图片 cordeBouee4.jpg二、实现光照贴图的效果1. 依赖库和头文件1.1 assimp1.2 stb_image.h2. egl_wayland_obj_cube1.cpp3. Matrix.h 和 Matrix.cpp4. xdg-shell-client-protocol.h 和 xdg-shell…

9.登入页面

登入页面 在pages中新建页面login 修改代码 <template><view></view> </template><script setup></script><style lang"scss"></style>添加头像组件 官网 https://vkuviewdoc.fsq.pub/components/avatar.html …

原生html vue3使用element plus 的树tree上移下移案例源码

上效果 html源码 <!DOCTYPE html> <html lang"en"> <!-- * Name: mallSalesReports.html * Description: * Author Lani * date 2024-02-28 18:32:36 --> <head><meta charset"UTF-8"><meta name"viewport" …

mapstruct学习笔记-pojo之间的转换

1、前言 mapstruct中常用注解如Mapping,AfterMapping,BeanMapping等的使用,通过案例说明各式各样的业务pojo对象之间如何借助mapstruct完成相互之间的转换,减少代码量的同时也能突出业务逻辑流程,让你的代码里写起来更有规范可言。 2、简介 Reference Guide – MapStruct 3…

【GPT概念01】生成式预训练转换器

一、说明 本文对GPT有所描述&#xff0c;主要解释了GPT的重要环节&#xff1a;only解码器。以及这个过程中&#xff0c;原始数据的维度演进、变化过程。对于想知道GPT内结构的朋友能有一定帮助。 二、唯一解码器模型入门 — 因果语言建模 Decoder only Model&#xff1a;唯一解…

Go web 基础相关知识

Go web Web工作方式 浏览器本身是一个客户端&#xff0c;当你输入URL的时候&#xff0c;首先浏览器会去请求DNS服务器&#xff0c;通过DNS获取相应的域名对应的IP&#xff0c;然后通过IP地址找到IP对应的服务器后&#xff0c;要求建立TCP连接&#xff0c;等浏览器发送完HTTP …

QT配置libtorch(一步到位!!!防止踩坑)

QT配置libtorch Qt下载QT配置MSVCQT配置Libtorch Qt下载 Qt点击下载 Qt的安装选择MSVC2017 64-bit(一定要安装&#xff0c;这关乎后面的配置&#xff01;&#xff01;&#xff01;)&#xff0c;其他的根据自己的选择进行安装 QT配置MSVC Visual Studio点击安装 这里需要安装VS以…

PwnLab靶场PHP伪协议OSCP推荐代码审计命令劫持命令注入

下载链接&#xff1a;PwnLab: init ~ VulnHub 安装&#xff1a; 打开vxbox直接选择导入虚拟电脑即可 正文&#xff1a; 先用nmap扫描靶机ip nmap -sn 192.168.1.1/24 获取到靶机ip后&#xff0c;对靶机的端口进行扫描&#xff0c;并把结果输出到PwnLab文件夹下&#xff0c;命名…

Spark相关

1.Hadoop主要有哪些缺点&#xff1f;相比之下&#xff0c;Spark具有哪些优点&#xff1f; Hadoop主要有哪些缺点&#xff1a;Hadoop虽然已成为大数据技术的事实标准&#xff0c;但其本身还存在诸多缺陷&#xff0c;最主要的缺陷是 MapReduce计算模型延迟过高&#xff0c;无法胜…

Swift中 any some的作用

前言 在学习Swift ui看到一个函数返回了some view。view我可以理解那some是什么&#xff1f; //ContentView.swift struct ContentView_Previews: PreviewProvider{static var previews: some View{ContentView()} }如果你仔细看一些官方文档甚至还有any关键字&#xff0c;也…

GPT实战系列-智谱GLM-4的模型调用

GPT实战系列-智谱GLM-4的模型调用 GPT专栏文章&#xff1a; GPT实战系列-实战Qwen通义千问在Cuda 1224G部署方案_通义千问 ptuning-CSDN博客 GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案 GPT实战系列-Baichuan2本地化部署实战方案 GPT实战系列-让CodeGeeX2帮…

日本技术,马来西亚制造:NBR SELE COT无硫手指套的革命性性能

在现代工业领域&#xff0c;对于保持生产环境的洁净和高效至关重要。而一种名为NBR SELE COT的无硫手指套正是满足这一需求的理想选择。这款手指套由日本技术开发&#xff0c;采用马来西亚原材料制造&#xff0c;凭借其卓越的性能在工业行业中广受好评。 NBR SELE COT手指套具有…