C语言malloc/free

如果定义一个指针,然后使用malloc 分配一块堆内存作为存储空间,使用一定要注意了:

1. 使用malloc 必须#include <stdlib.h> 或是 #include <malloc.h>, 而且 NULL 也是需要包含这些头文件的,并不是C预言的关键字。

2. 首先需要定义一个指向某种数据类型指针,然后需要使用malloc 函数分配一定的存储空间,malloc 会返回分配指定大小的存储空间的首地址。

3. 指针以及malloc 的存储空间使用完了之后需要free, 不然就会出现内存泄露,因为系统是不会自动释放这块内存空间。堆内存也就会越用越小。

4. 执行完free 之后,之前malloc的这块内存空间就会得到回收,但是起初定义的指针还是指向malloc 时返回的存储空间首地址。如果在free 之后,使用这个指针,并不会报错,但是问题就来了,如果程序继续malloc 内存,正好malloc 到了之前这个指针的那片区域,然而你却还在对这个指针指向的内存空间写入操作,这样就会出现memory coruption ! 严重的情况就会导致,之后malloc 这块内存空间的程序出现data abort 等问题了。

VC 测试练习例子:

//null test project
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <memory.h>

void main(int argc, char* argv[])
{
	char szBuffer[] = "Hello world!";
	char* q;
	char* p = (char*)malloc(sizeof(szBuffer));

	if(!p)
	{
		printf("memory malloc fail!!!");
		return;
	}

	strcpy(p, szBuffer);

	if(p)
	{
		free(p);
		//p[3] = 5;
		p = NULL;
		//p[4] = 5;
	}
}


这篇博客写的很好,可以参考一下:

http://www.cppblog.com/besterChen/archive/2010/01/13/105538.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值