c语言free函数的实现,c++中free函数

C语言malloc与free函数的用法

1. 分配内存空间函数malloc

创新互联成都企业网站建设服务,提供成都网站建设、成都网站制作网站开发,网站定制,建网站,网站搭建,网站设计,成都响应式网站建设公司,网页设计师打造企业风格网站,提供周到的售前咨询和贴心的售后服务。欢迎咨询做网站需要多少钱:18980820575

调用形式:

(类型说明符*)malloc(size)

功能:在内存的动态存储区中分配一块长度为"size"字节的连续区域。函数的返回值为该区域的首地址。

“类型说明符”表示把该区域用于何种数据类型。

(类型说明符*)表示把返回值强制转换为该类型指针。

“size”是一个无符号数。

例如:

pc=(char *)malloc(100);

表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。

2. 分配内存空间函数 calloc

calloc 也用于分配内存空间。

调用形式:

(类型说明符*)calloc(n,size)

功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。

(类型说明符*)用于强制类型转换。

calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。

例如:

ps=(struet stu*)calloc(2,sizeof(struct stu));

其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

2. 释放内存空间函数free

调用形式:

free(void*ptr);

功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。

【例】分配一块区域,输入一个学生数据。

main()

{

struct stu

{

int num;

char *name;

char sex;

float score;

} *ps;

ps=(struct stu*)malloc(sizeof(struct stu));

ps-num=102;

ps-name="Zhang ping";

ps-sex='M';

ps-score=62.5;

printf("Number=%d\nName=%s\n",ps-num,ps-name);

printf("Sex=%c\nScore=%f\n",ps-sex,ps-score);

free(ps);

}

本例中,定义了结构stu,定义了stu类型指针变量ps。然后分配一块stu大内存区,并把首地址赋予ps,使ps指向该区域。再以ps为指向结构的指针变量对各成员赋值,并用printf输出各成员值。最后用free函数释放ps指向的内存空间。整个程序包含了申请内存空间、使用内存空间、释放内存空间三个步骤,实现存储空间的动态分配。

C语言中的free函数如何正确使用

free只能释放由堆动态申请的空间,但是第一个中p,q两个不同的指针变量指向同一片地址,

free(q);

q = NULL;

后,q和p指向的空间被释放,且q被赋值为NULL,但是此时p变量的值并没有改变,即其值还是原来申请的空间的首地址。这里注意原来申请的空间已被释放,只是p还保留那篇空间的首地址值,所以一般开发中释放空间后,要把相关变量赋值为NULL,以防后面会非法访问一个已经释放的空间。

第二个,释放了。

c语言 free函数

void free(void *ptr)

{

struct mem_control_block *free;

free = ptr - sizeof(struct mem_control_block);

free-is_available = 1;

return;

}

其实很简单,就是把内存的标记设置为可用(并包括用于管理的内存).

至于系统如何根据这些标记去分配内存我不清楚,那是各个系统的事情了.

求大神解惑C语言free函数工作原理?

首先肯定你的主动思考,学习的主动性

然后明确说,malloc/free有多种不同的实现,可以认为都是采用第二种办法,或者变相采用第二种办法。

首先说静态变量行不通,不太可能只调用一次malloc,调第二次就覆盖掉了,行不通。

一般的实现,是把分配内存的长度等信息放在malloc来的指针的前面,用一个小结构来记录分配的大小以及状态信息,想要查证也不难,去下载一些源代码阅读一下就行。

至于你说的释放最近一次分配的内存,是另一个话题,涉及到内存泄漏。

举个小片段:

char *a = (char *)malloc(100);

a = (char *)malloc(100);

free(a);

分配了两次,只能free最后一次分配的,前一次分配的,丢掉了,找不回来。

这个最后一次,指的是这个意思

C语言:关于FREE()函数的用法

不可以的。

malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。

那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。

C语言的free()函数

因为free函数仅仅是告诉操作系统,这一块内存被释放了,可以用来作其它用途。但是,由于你没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化。所以输出值不变。

通常建议,将这个p用完了也置NULL


当前文章:c语言free函数的实现,c++中free函数
地址分享:http://hbruida.cn/article/hcidej.html