void getMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
void main()
{
char *str = NULL;
getMemory(&str, 100);
strcpy(str, “hello”);
cout << str << endl;
free(str);
}
上面代码会出现内存泄漏吗?
{
*p = (char *)malloc(num);
}
void main()
{
char *str = NULL;
getMemory(&str, 100);
strcpy(str, “hello”);
cout << str << endl;
free(str);
}
上面代码会出现内存泄漏吗?
解决方案
10
误人子弟
当申请空间失败时,后面那个strcpy会造成内存泄漏!
10
就事论事,这个代码不会造成内存泄漏,也不会出现缓冲区溢出
假如malloc成功了,那程序正常执行,分配的空间由后面的free正常释放
假如malloc失败了,那返回的是NULL,用strcpy写NULL肯定会发生读写错误,程序会在运行时崩溃
假如malloc成功了,那程序正常执行,分配的空间由后面的free正常释放
假如malloc失败了,那返回的是NULL,用strcpy写NULL肯定会发生读写错误,程序会在运行时崩溃