本人是个小白,写博客主要是复习加记录。如果有写错的、写的不好的、要添加的内容,
希望大佬指点(在评论区留言),我会慢慢完善。(谢谢了!!!!)
malloc()函数原型
extern void*malloc(unsigned int size);
该函数接受一个参数:所需的内存字节数。
malloc()函数的作用:
malloc()函数会找到合适的空闲内存块,这样的内存是匿名的。(malloc()分配内存,但不会为其赋名)。
malloc()函数的使用:
malloc()函数会返回动态分配内存的首字节地址。故可以把该地址赋给一个指针变量,并使用指针访问这块内存。
因为char表示1字节,malloc()的返回类型通常被定义为指向char的指针。
但从ANSI C标准开始,C使用一个新型:指向void的指针(该类型相当于一个“通用指针”)。
所以malloc()函数返回的实际是一个无类型的指针,malloc()函数可用于返回指向数组的指针、指向结构的指针等,所以通常给函数的返回值会被强制转换为匹配的类型。
在ANSI C中,应该坚持使用强制类型转换,提高代码的可读性。
故可以这样使用malloc()函数:
指针自身 = (指针类型*)malloc(sizeof(数据类型)*数据数量)
double * ptd;//创建一个ptd指针
ptd = (double *) malloc(30 * sizeof(double)); //ptd指向malloc函数分配好内存的地址
注:指针ptd被声明为指向以个double类型,而不是指向内涵30个double类型值的块。故,如果让ptd指向这个块的首元素,便可以像数组名一样去使用它。
例:ptd[0]访问该块的首元素,ptd[1]访问第2个元素,以此类推。
如果malloc()分配内存失败,便返回空指针NULL。
malloc()的头文件
#include <stdlib.h>
free()函数
free()的重要性
静态内存的数量在编译时是固定的,在程序运行期间也不会改变。自动变量使用的内存数量在程序执行期间自动增加或减少。但是动态分配的内存数量只会增加,除非用free()进行释放。
free()的原型
void free(void *ptr);
free()的使用
free()函数的参数是之前malloc()返回的地址,该函数释放之前malloc()分配的内存。
注:不能用free()释放通过其他方式(如,声明一个数组)分配的内存。
double * ptd;//创建一个ptd指针
ptd = (double *) malloc(30 * sizeof(double)); //ptd指向malloc函数分配好内存的地址
free(ptd);//释放malloc()函数分配的内存
对于free(ptr),若ptr为NULL,则可进行屡次释放,若ptr是非空指针,则free()对ptr只能进行一次操作,不然程序将崩溃。
free()的头文件
#include <stdlib.h>