更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C语言中指针与malloc,free的用法

  • 发布:达内
  • 来源:达内
  • 时间:2015-01-14 10:57

首先什么是指针:指针用来存放变量的地址,也就是操作操作内存。C语言中定义一个指针变量存储内存的地址,它是一个32位无符号整数的值。

1、如何初始化一个指针

int *pbuff1; 和 int *pbuff2 = NULL;的区别是什么呢

首先,*pbuff1没有初始化指向NULL,也没指向合法的内存。所以*pbuuf1是个野指针。它会胡乱指向一个地址,这是很危险的。当你对野指针进行写操作的时候,没人会知道结果怎样,可能会修改掉程序中其它值。

*pbuff2初始化为NULL指针,表示*pbuff2不指向任何内容,将指针悬空。指针就不会乱指一气了。

2、如何使用一个指针

建议使用前给指针分配空间。一般使用指针的时候就知道需要多大的空间了。

这就用到malloc:

void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)

pBuff = malloc(lenAll*sizeof(char));

if(pBuff!=NULL)

{

memcpy(pBuff,buff,8*sizeof(char));

}

这里是先分配一个空间,然后把内存地址指向了pBuff,如果分配成功了,就把接收到buff里的值存放到pBuff指针。

同样初始化unsigned char *pBuff = NULL;

3、如何防止内存泄漏

malloc对应着free:

void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。

注意free到底释放了什么:

free()释放的是指针指向的内存。指针变量依然存在,只有程序结束时才被销毁。不过现在指针指向的内容是未定义的垃圾,所以现在指针又成为了野指针。

因此,释放内存后把指针指向NULL,悬空。防止指针在后面不小心又被解引用了。

同时,确认不用这块内存了在free,不要free完了接着使用。

4、补充:

malloc和free是一一对应的,如果你只malloc一次,相应的就要free一次,重复释放是错误的。

malloc()函数的工作机制:

malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到 足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那 块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的 小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱 倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C++的那些事:类的拷贝控制
下一篇:C/C++在头文件上的区别与联系

超全的C语言标识符知识

C指针——指针类型转换

C指针——指针和结构类型的关系

C指针——数组和指针的关系

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省