提示:这篇主要讲解动态内存分配的内存泄漏问题。
文章目录
面试题三
#include<stdio.h>
void GetMemory(char** p, int num)
{
*p = (char*)malloc(num);
}
void Test(void)
{
//指针变量一定要初始化
char* str = NULL;
GetMemory(&str, 100);//传址
strcpy(str, "hello");
printf(str);
}
int main()
{
Test();
return 0;
}
这篇文章的内容与面试题二的其中一种改正方法一样,但是还缺少一样东西,那就是没有用free函数释放动态内存开辟的空间,导致内存泄漏。注意只要出现malloc,calloc,realloc函数,我们一定要考虑到用free函数释放空间,并把指针置为空。
改正后的代码如下:
#include<stdio.h>
void GetMemory(char** p, int num)
{
*p = (char*)malloc(num);
}
void Test(void)
{
//指针变量一定要初始化
char* str = NULL;
GetMemory(&str, 100);//传址
strcpy(str, "hello");
printf(str);
//改正代码:
free(str);
str = NULL;
}
int main()
{
Test();
return 0;
}