全部博文(1293)
分类: C/C++
2013-01-26 16:53:09
1、malloc函数的作用
malloc函数可以从堆上获得指定字节的内存空间。
2、malloc函数的声明
void* malloc(int n);
(1)、n为要求分配的字节数;分配成功返回内存空间首地址;失败返回NULL
(2)、返回类型是void型指针,故可以将其转换后赋给任意类型指针,通过赋值就可以通过操作从堆上获取的内存空间。
3、malloc函数使用注意点
由于malloc分配的内存空间是未初始化的,所以使用前应使用memset将其全部初始化为0。
void *memset(void *p,int c,int n)
p为要清0的内存首地址;C为要设定的值,如0;n为被操作的内存空间的字节长度;
4、malloc与memset搭配使用的案例如下
int _tmain(int argc, _TCHAR* argv[]) { int *p = NULL; p = (int*)malloc(sizeof(int)); if ( p == NULL) { printf("Can't get memory!\\n"); return ERROR; } printf("%d\\n",*p); memset(p,0,sizeof(int)); printf("%d\\n",*p); *p = 2; printf("%d\\n",*p); return 0; }
5、从堆上获得的内存空间在程序结束后,系统不会将其自动释放!!需要程序员来自己管理。所以,一个程序结束时,必须保证所有从堆上获得的内存空间已被安全释放,否则会导致内存泄露。
如何处理?
操作系统提供了free函数来处理这个情况。
void free(void *p)
可以看到,free函数的形参是void*,所以可以接受任意类型的指针实参。
需要注意的是,free函数只是释放指针指向的内容,而该指针仍然指向原来指向的地方,此时就形成经典的野指针,若再对该指针进行操作,就会引起不可预期的错误。
所以free的安全使用法,在上例的return 0前加上下面两句:
free(p);
p = NULL;
将指针的值置为NULL