c++使用malloc来做内存分配创建链表

2023-05-16

    c++中创建链表可以直接通过new对象的方式创建节点,然后将节点之间的关系通过next指针来关联起来,另外,也可以通过malloc来分配内存,创建节点。这里介绍如何通过malloc来创建链表。

    malloc分配内存的方式为malloc(sizeof(typename)),最后 还需要通过类型转换,将它转为(typename *),如下所示:

node *p=NULL;
p = (node *)malloc(sizeof(node));

    下面给出一个代码示例,我们通过代码来创建一个链表,使用一个循环依次为链表的节点赋值:

#include <iostream>
using namespace std;
#define SIZE sizeof(node)
struct node{
	int data;
	node *next;
};
node *create(){
	node *head = NULL;
	node *p = NULL;
	node *cur;
	for(int i=1;i<=5;i++){
		p = (node *)malloc(SIZE);
		p->data = i;
		p->next = NULL;
		if(head==NULL){
			head = p;
			cur = head;
		}else{
			cur->next = p;
			cur = cur->next;
		}
	}
	return head;
}

void display(node *head){
	cout<<"list node -> ";
	while(head!=NULL){
		cout<<head->data<<" ";
		head = head->next;
	}
	cout<<endl;
}
int main(){
	node *head = create();
	display(head);
	return 0;
}

    运行代码,打印如下:

     

     这个代码有个地方需要注意,很容易忽视的,就是当我们通过malloc分配了内存,默认节点是有默认值的,我们需要将data设置为我们需要设置的值,而且next也必须设置为NULL,如果next不设置,编译不会报错,但是运行会报错,如下所示:

     

    运行程序报错: 

    

     这里也容易理解,因为next有值,所以在while(head!=NULL)判断时会进入,但是当获取data值的时候就报错了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++使用malloc来做内存分配创建链表 的相关文章

  • malloc 对内存对齐做出哪些保证?

    我遇到了以下代码 int main char A char malloc 20 char B char malloc 10 char C char malloc 10 printf n d A printf t d B printf t d
  • 程序终止后动态分配内存

    当包含动态分配内存 使用 malloc new 而没有 free delete 调用的 C C 程序终止时 动态分配的内存会发生什么 操作系统是否收回内存 或者其他程序是否无法访问该内存 我不认为语言标准有任何保证 但是支持稀疏虚拟内存和内
  • 我应该检查 malloc() 是否成功吗?

    应该在每次之后检查一次malloc 如果成功了 有没有可能malloc 失败 然后会发生什么 在学校我们被告知我们应该检查 即 arr int malloc sizeof int x y if arr NULL printf Error A
  • C++ new / new[],它是如何分配内存的?

    我现在想知道这些指令如何分配内存 例如 如果我得到代码怎么办 x new int 5 y new int 5 如果这些都被分配了 那么它在 RAM 中的实际情况是什么样的 是否为每个变量保留整个块 或者块 内存页或如何称呼它 32 位上的
  • 如何用c语言编写一个简单的malloc函数

    作为操作系统的作业 我们必须用 C 编程语言编写自己的 malloc 和 free 代码 我知道如果我要求它的代码 我就没有必要学习 我面临的问题是不知道在哪里包含初始化 50000 字节的 char 数组并使两个列表空闲和使用 在我的函数
  • 分配 RAM 在任务管理器中显示 RAM 使用量的两倍

    进行一些分析 内存和速度 我对 win7 似乎分配的 RAM 恰好是我要求的两倍这一事实感到震惊 请注意 这是我第一次在 win7 上进行此类主动分析 所以我不这样做我真的不知道会发生什么 我在 win7 64 位 下使用 MSVC 的 E
  • 跟踪 malloc 分配了多少内存

    在快速浏览了 SO 上的相关问题后 我推断没有函数可以检查 malloc 分配给指针的内存量 我正在尝试使用 C 中的简单 char 来复制一些 std string 基本功能 主要是动态大小 并且不想一直调用 realloc 我想我需要跟
  • 如何在c中找到内存分配的最大限制

    我想确定我可以在计算机中分配的最大内存限制是多少 这是我为此任务编写的代码 include
  • 如何在 JavaScript 中有效地将大块细分为许多大小为 2 的幂的小块

    建设关闭这个答案 https stackoverflow com questions 66253424 how to efficiently segment a large block of predefined size into sma
  • C++ 中可以混合使用 free 和构造函数吗? [复制]

    这个问题在这里已经有答案了 可能的重复 调用free 或delete而不是delete 有什么危险吗 https stackoverflow com questions 1612031 is there any danger in call
  • 对对齐的 malloc 实现的解释

    这不是作业 这纯粹是为了我自己的个人教育 我不知道如何实现对齐的 malloc 所以在网上查找并发现这个网站 https sites google com site ruslancray lab bookshelf interview ci
  • 从 void* 到 char** 的转换无效

    自从我搞乱 C 代码以来已经有一段时间了 在 Ubuntu 下使用 gcc 编译 C 代码时出现以下错误 我用来编译代码的命令是 如果这些错误是由于我使用的编译器造成的 请让我知道如何消除该错误 gcc o runnable mycode
  • 我真的需要 malloc 吗?

    据我了解 malloc是用来动态分配内存的 在我的代码中 我有时会调用以下函数 int memory get log unsigned char day unsigned char date unsigned char month char
  • C++ 中的 malloc/free 和 new/delete 兼容性?

    malloc free 和 new delete 有一个很好的比较here https stackoverflow com questions 240212 what is the difference between new delete
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 如何分配二维数组? [复制]

    这个问题在这里已经有答案了 我需要创建一个二维数组 目前我将其创建为int a 100 100 但我需要使用动态分配内存malloc在C语言中 我用了代码 include
  • 为什么 new()/delete() 比 malloc()/free() 慢?

    为什么new delete 比malloc free 慢 EDIT 感谢到目前为止的回答 如果您有new 和delete 的标准C 实现规范 请指出 谢谢 看一下这段C代码 struct data pd malloc sizeof stru
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • 为什么 char 指针保存的数据比 C 中分配的内存更多?

    在使用 C 进行动态内存分配时 我在将内存大小分配给 char 指针时感到困惑 虽然我只给出 1 个字节作为限制 char 指针成功地接收尽可能长的输入 假定每个字母对应 1 个字节 我还尝试查找输入前后指针的大小 我怎样才能理解这里发生了
  • mprotect 之后 malloc 导致分段错误

    在使用 mprotect 保护内存区域后第一次调用 malloc 时 我遇到分段错误 这是执行内存分配和保护的代码片段 define PAGESIZE 4096 void paalloc int size Allocates and ali

随机推荐

  • docker私有镜像服务搭建

    docker容器技术已经在部署服务上使用的非常普遍 xff0c 主要是它的隔离性以及快速启动的特性 xff0c 一般启动一个容器 xff0c 如果镜像不存在会先去dockerhub仓库下载 xff0c 然后存储在本地 xff0c 后续可以继
  • vs2017开发第一个desktop应用程序

    desktop应用程序也叫窗口程序 xff0c 我们平时在电脑上安装的APP xff0c 都是桌面程序 xff0c 比如QQ xff0c 各种播放器 xff0c 包括浏览器 桌面程序最主要的特点 xff0c 就是点击运行之后 xff0c 会
  • 量子编程入门第一篇环境搭建dotnet-sdk+Microsoft.Quantum.IQSharp+python3.6+qsharp

    量子编程已经提上日程 xff0c 微软提供了quantum开发工具包 Microsoft Quantum Development Kit简称QDK xff0c 在visual studio 2019环境下 xff0c 可以安装quantum
  • ROS2学习笔记(十)-- ROS2 launch启动文件

    简介 xff1a 接触过ROS1的同学对launch肯定不陌生 xff0c 在ROS1中 xff0c 我们常用launch实现node和master同时启动 多节点同时启动配置等功能 xff0c ROS2中的launch也是用于多节点启动
  • 记录一次解决TypeError: 'NoneType' object is not callable的办法

    如题所示 xff0c 这是python运行时报错 xff0c 关键信息就是 xff1a TypeError 39 NoneType 39 object is not callable xff0c 错误栈信息如下 xff1a 有的文章提示 x
  • windows下VC++6.0编写c++程序连接mysql示例

    windows下通过c 43 43 编码连接mysql数据库 xff0c 需要做一些设置 xff0c 因为我们需要连接mysql并执行相关操作 xff0c 需要使用mysql提供的api xff0c 这api在mysql h头文件中定义了
  • windows修改cmd命令行字体

    默认情况下 xff0c windows命令行字体只有两种 xff0c 点阵字体和新宋体 如果你想使用系统自带的其他字体 xff0c 需要更改注册表 这里介绍如何修改 windows系统字体在目录C Windows Fonts 下 xff0c
  • centos7安装与配置DNS服务器

    centos7上安装DNS服务器可以实现域名与IP的双向解析 xff0c 即通过域名可以找到主机IP xff0c 也可以通过IP找到域名 在postfix搭建邮件服务器中 xff0c 需要用到DNS正向解析与反向解析 xff0c 因此DNS
  • springboot项目单元测试

    springboot项目和普通的spring项目一样也可以做单元测试 xff0c 一般是测试service层的方法 xff0c 在进行项目构建的时候 xff0c 需要在springboot默认依赖的基础上 xff0c 再加上spring b
  • ipfs星际文件系统初体验

    ipfs是InterPlanetary File System的简称 xff0c 即星际文件系统 xff0c 他不同于一般的操作系统文件系统 xff0c 也不同于分布式文件系统 xff0c 因为分布式文件系统最终访问文件还是采用的http协
  • truffle构建以太坊应用并测试第一个helloworld智能合约

    最近因为国家对区块链又重视起来了 xff0c 相信今年年底到明年年初会是一个区块链的新的爆发点 xff0c 也是碰巧学习了一下以太坊构建区块链应用 xff0c 以前都是简单的了解 xff0c 并没有实际动手演练 今天趁机会也学习一下区块链
  • docker启动报错:standard_init_linux.go:211: exec user process caused "no such file or directory"

    如题所示 xff0c 根据自己构建的镜像启动docker容器 xff0c 直接退出 xff0c 查看容器日志报错信息 xff0c 没有任何别的信息 网上搜索这个问题 xff0c 发现很多人都遇到过 xff0c 解决办法也各不相同 xff0c
  • windows下telnet回显解决办法

    telnet相信大家都用过 xff0c 在tcp连接中 xff0c 我们可以用来模拟发送客户端请求 xff0c 当我们输入telnet 127 0 0 1 8888连接本机的tcp 8888端口时 xff0c 连接成功后 xff0c 会进入
  • springboot与flyway集成做数据迁移

    flyway是一种用来做数据迁移的框架 xff0c 如果你的项目不是jpa 43 hibenate xff0c 比如使用的mybatis xff0c 那么你需要在实体创建之前 xff0c 在数据库中生成表结构 xff0c 然后逆向工程 xf
  • ROS2学习笔记(十一)-- ROS2 bag数据记录与回放

    简介 xff1a ROS2提供了ros2 bag命令 xff0c 可以记录指定主题的数据到文件中 xff0c 也可以将记录下的内容再发布出来 xff0c 相当于是数据的回放 xff0c 除了通过命令行的方式实现数据记录以外 xff0c 也可
  • C++实现简单链表

    链表是最常用的一种数据结构 xff0c 无论什么语言 xff0c 学习数据结构 xff0c 都绕不开链表 xff0c 下面通过c 43 43 来实现简单链表 xff0c 所谓简单链表 xff0c 就是构建链表 xff0c 然后遍历打印链表
  • 二分查找算法介绍

    二分查找算法的实现过程如下 xff1a 在排序数组中查找某一个数据项 xff0c 首先让待查数据与中间下标元素开始比较 xff0c 如果相等则返回 xff0c 如果小于中间下标元素 xff0c 重新开始从低位开始 xff0c 中间下标 1
  • centos7下安装gitlab-ci持续集成实战

    gitlab提供了ci cd持续集成 持续部署的功能 xff0c 当我们安装了gitlab之后 xff0c 需要单独再安装gitlab ci multi runner xff0c 其实就是gitlab runner xff0c 为了试验 x
  • centos7下安装单机版kubernetes实战

    kubernetes是docker分布式解决方案 xff0c 是当前最火的docker解决方案 xff0c 一般初学者适合玩单机安装 kubernetes安装很简单 xff0c 只需要通过yum安装etcd kubernetes即可 默认k
  • c++使用malloc来做内存分配创建链表

    c 43 43 中创建链表可以直接通过new对象的方式创建节点 xff0c 然后将节点之间的关系通过next指针来关联起来 xff0c 另外 xff0c 也可以通过malloc来分配内存 xff0c 创建节点 这里介绍如何通过malloc来