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值的时候就报错了。

c++使用malloc来做内存分配创建链表相关推荐

  1. malloc用户态内存分配

    学习完了用户进程地址空间,那么从本章开始学习下用户空间的内存分配.对于我们来说,对是进程中用于动态分配变量和数据的内存区域,堆的管理对应用程序员来说是不可见的.因为它依赖于标准库提供的各种辅助函数(m ...

  2. malloc的内存分配之 malloc(0)的内存分配情况

    #include<iostream> using namespace std; int main() {char *p;if((p=(char *)malloc(0))==NULL)put ...

  3. malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

     1.在main方法里面直接定义一个非常大的数组的时候,可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void ...

  4. c语言链表内存分配失败,链表的C语言实现之动态内存分配

    链表的C语言实现之动态内存分配 來源:互聯網  2008-06-01 02:05:07  評論 一.为什么用动态内存分配 但我们未学习链表的时候,假如要存储数量比较多的同类型或同结构的数据的时候,总是 ...

  5. 数据结构之malloc()函数动态内存分配复习

    直接上代码分析 #include <stdio.h> #include <string.h> #include <malloc.h>int mian() {int ...

  6. C中的malloc:C中的动态内存分配

    什么是C中的malloc()? (What is malloc() in C?) malloc() is a library function that allows C to allocate me ...

  7. 3. 对象创建与内存分配机制

    对象的创建过程 1. 类加载检查 虚拟机遇到new指令的时候,首先去检查这个指令的参数能否在常量池中定位到一个符号引用,并检查这个符号引用所代表的类是否已被加载.解析和初始化过.如果没有,则执行相应的 ...

  8. MySQL 实际内存分配

    背景 MySQL 版本: MySQL 5.7.20 硬件配置: 8C + 32GB + 1000GB MySQL实际内存分配   MySQL 的内存是一个重要的性能参数,常常出现由于异常的SQL请求以 ...

  9. linux c 指针和内存分配内存,Linux C语言指针与内存学习笔记

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 环境准备 Ubuntu 操作系统.VIM 编辑器.GCC 编译器.GDB调试器. 初始指针 通过两个数的交换引入指针指针 ...

最新文章

  1. 利用双向循环链表实现长整数的存储_链表看这一篇真的就够了!
  2. POJ 1691 Painting A Board
  3. 大航海商务助理更新1.24
  4. mysql有nvarchar类型_mysql如何处理varchar与nvarchar类型中的特殊字符
  5. matlab save txt 乱码,matlab代码或中文复制到word就变成乱码怎么办?
  6. 微课|中学生可以这样学Python(3.4节):选择结构的嵌套
  7. 无法将文件“ “复制到“bin\*.*”。对路径“bin\*.*”的访问被拒绝。 解决方法
  8. SharePoint Web Service系列: Add或Update其他各种类型的项
  9. 【C#设计模式——创建型模式】抽象工厂模式
  10. 纸张的规格A3.A4.A5.A6纸的尺寸大小
  11. 渗透测试信息收集笔记(信息搜集、后台查找)
  12. 查找Mac序列号的9种方法
  13. 纯千兆电口和自适应电口的区别
  14. Allegro自动对齐工具
  15. 第三章 栈与队列(二)
  16. 《KVM虚拟化技术实战和原理解析》读书笔记(三)
  17. 三星手机定时开关机设置方法
  18. Vue——按钮名字点击来回切换
  19. 科学家制造迄今最低温度新纪录
  20. VS2017使用NuGet安装Oracle.ManagedDataAccess.EntityFramework 的异常解决

热门文章

  1. Java接口开发流程总结
  2. java 递归算法伪代码,从伪代码实现递归(NTRUE加密)
  3. 你买的钻石是真的吗?这个技术可能打破鉴定门槛
  4. 黑马程序员,黑马论坛----'Android26期,毕业67天,就业率98.57%,平均薪水8622元!
  5. 【网络编程知识】什么是Socket?概念及原理分析
  6. 高德地图的绘制路线、批量标记点和点的信息展示
  7. append() 方法
  8. qt学习之sender
  9. 亚马逊跨境电商利润这么大?
  10. 多项式mod的运算方法