哪位高手能帮小弟我看看这段代码,编译能通过 运行时异常 用VC的
谁能帮我看看这段代码,编译能通过 运行时错误 用VC的
#include <iostream>
char * GetMemory(char *p, int num)
{
p=(char *)malloc(sizeof(char)*num);
return p;
}
int main()
{
char *str=NULL;
GetMemory(str,100);
strcpy(str, "hello ");
return 0;
}
------解决方案--------------------
#include <iostream>
char * GetMemory(char **p, int num)
{
p=(char *)malloc(sizeof(char)*num);
return p;
}
int main()
{
char *str=NULL;
GetMemory(&str,100);
strcpy(str, "hello ");
return 0;
}
------解决方案--------------------
上面两个人都说了,使用返回值,或者将形参改为引用,或者使用址传递方法
------解决方案--------------------
但是上面的程序都没有注意free内存。有内存泄漏
------解决方案--------------------
内存泄漏要从程序整体角度考虑,有时候一个函数内可以使得malloc和free不匹配,只要这样的函数对在外面匹配就可以了吧
#include <iostream>
char * GetMemory(char *p, int num)
{
p=(char *)malloc(sizeof(char)*num);
return p;
}
int main()
{
char *str=NULL;
GetMemory(str,100);
strcpy(str, "hello ");
return 0;
}
------解决方案--------------------
#include <iostream>
char * GetMemory(char **p, int num)
{
p=(char *)malloc(sizeof(char)*num);
return p;
}
int main()
{
char *str=NULL;
GetMemory(&str,100);
strcpy(str, "hello ");
return 0;
}
------解决方案--------------------
上面两个人都说了,使用返回值,或者将形参改为引用,或者使用址传递方法
------解决方案--------------------
但是上面的程序都没有注意free内存。有内存泄漏
------解决方案--------------------
内存泄漏要从程序整体角度考虑,有时候一个函数内可以使得malloc和free不匹配,只要这样的函数对在外面匹配就可以了吧