free函数和malloc函数

初学c和数据结构是对其很不明确,通过一些资料,稍微理解了,所以记下以后复习之用,如果有错误或者理解不当的情况请指正,不胜感激。

一malloc和free函数

malloc函数:(void*)malloc(sizeof(byte)),向系统申请大小的空间,然后返回指向这个内存的指针。如果内存分配失败,则返回一个空指针(NULL)当然,造成内存分配失败的吗原因有很多,其中一个是内存不足。

而free就是把这个操作空间返回给系统,释放这块内存。具体代码使用情况很简单

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 void main()
 4 {
 5   int *a;
 6   a=(int*)malloc(sizeof(int));
 7   if(!a)
 8       exit(-1);
 9   free(a);
10    a=NULL;
11 }

注意:malloc和free是对应的,当申请的空间不再使用后一定要free;free后要把指针初始化,以防野指针是出现。

2.函数操作原理

malloc从哪里申请内存?是从操作系统中的堆中申请空间内存的,这和链表有些相似,系统返回的指针指向堆中的内存,系统把空闲的结点练成一个链表,也就是空闲链表,当malloc时,系统从空闲链表中遍历,找到所需空间的的堆结点,然后把此结点从空闲链表中删除,把此结点分配给程序,而free操作,则是把结点归还到空闲链表中,通过指针的作用,这里不多说,可以看一下静态链表中的操作,是通过游标实现的,原理差不多。堆操作完成,当不需要使用次内存时,一定要释放,同时需要对指针进行初始化。

堆的释放是由程序员自己释放的。

与堆相对的是栈

栈是由编译器自动分配释放,存放函数的参数值,局部变量的值的。

假设定义一个指针,此指针指向堆,也就是说内存在堆上,但这个指针地址在栈中存储卡所以即使栈已经被销毁了,但是那块内存人在那里,所以使用完后一定要free操作



暂时先说这么多,下次再补充free和malloc函数源代码及原理……

时间: 2024-10-20 20:19:47

free函数和malloc函数的相关文章

c realloc函数和malloc函数

realloc 原型:extern void *realloc(void *mem_address, unsigned int newsize); 用法:#include <stdlib.h> 有些编译器需要#include <alloc.h> 在C++环境中,使用#include<iostream> using namespace std;功能:改变mem_address所指内存区域的大小为newsize长度. 说明:如果重新分配成功则返回指向被分配内存的指针,否则返

malloc函数用法

malloc函数用法 函数声明(函数原型): void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间.返回类型是 void* 类型.void* 表示未确定类型的指针.C,C++规定,void* 类型可以强制转换为任何其它类型的指针. 从函数声明上可以看出.malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小.比如: int *p; p = new int; //返回类型为int* 类型(整数型指

malloc函数具体解释

一.原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是全然一致的.) 功能:分配长度为num_bytes字节的内存块 说明:假设分配成功则返回指向被分配内存的指针,否则返回空指针NULL. 当内存不再使用时,应使用free()函数将内存块释放. 举例:#include<stdio.h>

malloc函数详解

一.原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的.) 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL. 当内存不再使用时,应使用free()函数将内存块释放. 举例: #include<stdio.h&g

入职培训笔记记录--day9(1、指针函数与函数指针、函数指针数组 2、malloc memset 3、递归函数 4、结构体 5、共用体---》大小端 6、枚举)

1.指针函数与函数指针.函数指针数组 指针函数:返回值为指针的函数 char *fun() { char str[] = "hello world"; return str; } int main() { char *p = fun(); puts(p); return 0; } 编译时,会出现警告,返回了一个已经被释放掉的内存空间的首地址解决方法:1.static 2.char *str = "hello world"; 3.malloc 注意:使用完后要free

malloc 函数详解

很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的.但是但是: 一部分人还是将:malloc当作系统所提供的或者是C的关键字,事实上:malloc只是C标准库中提供的一个普通函数 而且很多很多人都对malloc的具体实现机制不是很了解. 1,关于malloc以及相关的几个函数 #include <stdlib.h>(Linux下) void *malloc(size_t size);        voi

传智播客视频学习 ----&gt;&gt;&gt;&gt; malloc() 函数的作用

C语言中的申请内存空间的函数 malloc() char *p = NULL; p = (char *)malloc( sizeof(char) * 100 ); 以上代码的含义是: 定义一个 char型 的 指针p 通过malloc函数给 指针p所指向的内存空间分配大小 p是内存地址 sizeof是获取char占用多少字节,一般是4个字节 malloc函数是void*函数 ( void * __cdecl malloc(_In_ _CRT_GUARDOVERFLOW size_t _Size)

sizeof运算符、malloc函数及free函数

一.sizeof运算符的用法 1.sizeof运算符给出某个类型或变量在内存中所占据的字节数. int a;  sizeof(a)=4;  //sizeof(int)=4; double b;  sizeof(b)=8;  //sizeof(double)=8; 2.数组的sizeof值等于数组所占用的内存总字节数. 如:char a[] = "yes";  sizeof(a);  // 结果为4,字符末尾还存在一个NULL终止符 int a[3];  sizeof(a);  // 结

C语言中malloc函数的简介

malloc函数 (1)解释malloc函数作用 malloc的全称是memory allocation,中文叫动态内存分配. malloc函数是想系统申请分配指定size个字节的内存空间.malloc的返回类型是void*类型.void*表示为确定类型的指针.C/C++规定void*类型可以强制转换为任何其它类型的指针. (2)全名 void * malloc(size_t size); (3)原型 extern void *malloc(size_t size); (4)头文件 #inclu