C++为何不能在函数体内动态申请内存,在函数体外释放
C++为什么不能在函数体内动态申请内存,在函数体外释放?
char *ladd(char *s1)
{
int n;
n = strlen( s1 );
char *res = new char[ n + 2 ];
return res;
}
void main()
{
char *num;
char num1[] = "asdfsgfsdg";
num = ladd( num1 );
delete [] num;
}
像这样最后delete了申请的内存,为什么书上还是说每次调用ladd时分配的内存空间没有释放,如果调用次数多了,大量的空间不能释放,就会造成死机。因此要避免在函数体内申请内存,在函数体外释放空间。可是为什么啊,都已经释放了啊,为什么还会有影响呢?
------解决思路----------------------
果然断章取义,你没看前面一句话吗,作者明明给你举个反例说如果这么做
会造成内存泄漏。
char *ladd(char *s1)
{
int n;
n = strlen( s1 );
char *res = new char[ n + 2 ];
return res;
}
void main()
{
char *num;
char num1[] = "asdfsgfsdg";
num = ladd( num1 );
delete [] num;
}
像这样最后delete了申请的内存,为什么书上还是说每次调用ladd时分配的内存空间没有释放,如果调用次数多了,大量的空间不能释放,就会造成死机。因此要避免在函数体内申请内存,在函数体外释放空间。可是为什么啊,都已经释放了啊,为什么还会有影响呢?
------解决思路----------------------
果然断章取义,你没看前面一句话吗,作者明明给你举个反例说如果这么做
std::cout<<ladd( num1 )<<std::endl;
会造成内存泄漏。