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时分配的内存空间没有释放,如果调用次数多了,大量的空间不能释放,就会造成死机。因此要避免在函数体内申请内存,在函数体外释放空间。可是为什么啊,都已经释放了啊,为什么还会有影响呢?
------解决思路----------------------
果然断章取义,你没看前面一句话吗,作者明明给你举个反例说如果这么做
  
std::cout<<ladd( num1 )<<std::endl;

会造成内存泄漏。