[Investor Relations]  |  官方微博

C/C++培训

美国上市公司 · 亿元级外企Java培训企业

  • 全国服务监督电话400-111-8989
  • C语言中指针与malloc,free的用法

    发布:达内  来源:达内  时间: 2015年01月14日

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

  • 首先什么是指针:指针用来存放变量的地址,也就是操作操作内存。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++函数的升级

网站导航
2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56