关于为什么要在链表中用malloc来分配内存

简介: 关于为什么要在链表中用malloc来分配内存

关于为什么要在链表中用malloc来分配内存

不知道有没有人和我一样,在学习链表的时候心里搞不懂为什么要用malloc来分配内存,细细想了想,是因为知道用int也可以分配内存,总觉得可以用什么可以替代malloc来进行内存分配,想了想,突然就明白了了。

  1. 基础数据类型可分配内存,比如int a = 0 ;这就是分配了一块内存,同时为这块内存起了个暂时的名字(为什么是暂时呢?因为在内存释放后,这个内存空间又可以重新分配给别的变量),并存入了一个“0”(当然,在内存块中是一串二进制数)。
  2. 引用数据类型(自定义的对象等)为啥叫引用呢?比如就是给变量 a 所在内存赋予另外一个别名 b ,可以这么理解。引用数据类型可以像基础数据类型那样直接类型+变量名就分配内存了吗?当然不可以!参考基本数据类型定义的实现我们可以知道,分配内存需要知道该分配多大的空间,int 占4个字节我们已经很清楚了,但是直接给出一个对象我们是不知道需要的内存大小的,所以,在为引用数据类型分配内存时,我们需要使用malloc ,realloc《reallloc的使用》等函数来分配空间(其中可以自定义选择空间大小)。

下面是 malloc() 函数的声明。

void *malloc(size_t size)//size -- 内存块的大小,以字节为单位。

该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。

!!!这不就能完全理解单链表的这段代码了吗

LNode* newNode = (LNode*)malloc(sizeof(LNode));

  • 为什么要强制转换呢?因为指针也是有数据类型的,错误的数据类型可能在访问数据元素时会出现问题。

以上是今天学习时的一些想法,欢迎指正。

相关文章
|
1月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
120 13
|
2月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
88 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
2月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
62 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
392 1
|
2月前
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
82 0
|
4月前
|
程序员 C++
malloc与free的内存管理奥秘:技术分享
【8月更文挑战第22天】在软件开发过程中,内存管理是一个至关重要的环节。特别是在使用C或C++这类语言时,程序员需要手动管理内存的分配与释放。malloc和free函数是这一过程中的核心工具。本文将深入探讨malloc如何分配内存,以及free如何知道释放多少内存,帮助你在工作学习中更好地掌握这一技术干货。
113 4
|
4月前
|
关系型数据库 MySQL
MySQl优化:使用 jemalloc 分配内存
MySQl优化:使用 jemalloc 分配内存
|
4月前
|
存储 算法 安全
实现一个malloc内存分配器
需要注意的是,这个例子是一个非常简单的实现,它只是为了演示原理,对于一个强壮的、用于生产环境的内存分配器来说还远远不够。一个成熟的分配器将考虑到多线程的同步、更复杂的内存分配算法、碎片整理策略、错误处理,以及安全性问题,比如防止缓冲区溢出。在实际应用程序中,你应该使用标准库提供的或操作系统提供的内存分配器,除非你确实需要并且能够处理自己实现内存分配器所带来的复杂性。
45 3
|
4月前
|
缓存 Java 编译器
Go 中的内存布局和分配原理
Go 中的内存布局和分配原理
|
5月前
|
存储 缓存 算法
(五)JVM成神路之对象内存布局、分配过程、从生至死历程、强弱软虚引用全面剖析
在上篇文章中曾详细谈到了JVM的内存区域,其中也曾提及了:Java程序运行过程中,绝大部分创建的对象都会被分配在堆空间内。而本篇文章则会站在对象实例的角度,阐述一个Java对象从生到死的历程、Java对象在内存中的布局以及对象引用类型。
140 8

热门文章

最新文章