C语言中malloc和free

C语言中动态分配内存的函数为malloc()函数,相应的内存释放函数为free()函数。它们的函数原型分别为:

void *malloc( size_t size );//头文件为stdlib.h或malloc.h
void free( void *memblock );

参数size为分配的字节大小(不是元素个数!)。

对于二级指针的分配,经常会犯糊涂……现在作一个总结:

C语言对二级指针所指内存的分配,先分配外层指针所指内存空间(存放指针值),再分配内层指针所指内存空间(存放对象数值);对内存的释放顺序则是先释放内层指针所指地址空间,最后释放最外层指针所指的地址空间。

下面通过一个具体的程序,进行解释:

float** p = (float**)malloc(240 * sizeof(float));//先给外层指针p分配地址空间
 
//再给内层指针分配地址空间
int i;
for(i = 0; i < 240; i++)
{
  p[i] = (float*)malloc(1216 * sizeof(float));
}
 
......
 
//释放内存
for(i = 0; i < 240; i++)
{
  free(p[i]);//先释放内存指针所指地址空间
}
//最后释放外层指针所指地址空间
free(p);
时间: 2024-10-09 23:51:30

C语言中malloc和free的相关文章

C语言中malloc()和free()函数的具体作用

本文想就C语言中malloc()和free()函数的具体作用做出一些说明,这些细节大家在使用过程中很有可能会忽略. 在C语言中要动态的释放内存,就必然要用到指针,将动态分配获得的空间地址赋值给指针.C语言中动态分配内存的函数为malloc(), 在用完后,要及时调用free()函数释放.理论上,这样是安全的,但其实这样是不安全的,因为free()函数仅仅是告诉操作系统,这块空间我不用了,操作系统收回空间.而指向这块空间的指针并没有改变,它的值仍然指向这块空间.这样,我就可以继续使用该指针操作内存

C语言中malloc()和calloc()c函数用法

C语言中malloc()和calloc()c函数用法 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小. void *calloc(size_t numElements,size_t sizeOfElement); 如果调用成功,函数mall

C语言中malloc函数的理解

在C语言中malloc函数主要是用在堆内存的申请上,使用malloc函数时,函数会返回一个void *类型的值,这个值就是你申请的堆内存的首地址:为什么返回的地址是一个void *类型的地址呢?首先我们要先弄明白,到底void是一个什么类型呢?很多C语言的初学者认为,void类型就是空类型,就是没有类型,但是实际上这种认知是扯淡的.因为空白的意思是可以容纳百物(讲C语言突然讲出了道家的思想,自己这么流弊的吗?哈哈哈哈哈嗝),既然可以容纳百物,也就是void型其实就是万能型,它可以指代任意类型.其

C语言中malloc()和free()函数解析

1.malloc()和free()的基本介绍 (1)函数原型及说明 void *malloc(long NumBytes) 该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回一个空指针(NULL). void free(void *FirstByte) 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由. (2)函数基本用法 1 char *Ptr = NULL; 2 Ptr = (char *)malloc(1

C 语言中 malloc、calloc、realloc 和free 函数的使用方法

C标准函数库中,常见的堆上内存管理函数有malloc(), calloc(), recalloc(), free(). 之所以使用堆,是因为栈只能用来保存临时变量.局部变量和函数参数.在函数返回时,自动释放所占用的存储空间.而堆上的内存空间不会自动释放,直到调用free()函数,才会释放堆上的存储空间. 一.具体使用方法 1.malloc() 头文件:stdlib.h 声明:void * malloc(int n); 含义:在堆上,分配n个字节,并返回void指针类型. 返回值:分配内存成功,返

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

c语言中malloc realloc 和calloc的联系与区别

(1)C语言跟内存分配方式 <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2>在栈上创建       在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. <3>从堆上分配,亦称动态内存分配.       程序在运行的时候用malloc或new申请任意多少的内存

c语言中的malloc函数

少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小. 函数:void *malloc(int size); malloc 向系统申请分配指定size个字节的

C语言中的malloc和free

最近在研究php自定义函数的实现,其中php自定义函数在传递参数时,是放到人为的一个栈中,这个跟写C程序时,参数入栈的这个栈还不一样,其中延伸到了 malloc 以及free 有人说在free(p)后,要将p设置为NULL, 在查找了一翻资料后,大体上弄明白了是怎么回事 参考资料: http://bbs.csdn.net/topics/200069568 malloc是向OS要一块内存,在OS中会用一个链表,将空闲的内存地址组织起来,当申请内存时,OS会链表中取出相应大小的内存给申请者 例如 i