如果定义一个指针,然后使用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