c++函数返回值来传递动态内存有关问题

c++函数返回值来传递动态内存问题下面这2个方法可以重新给str分配内存char*GetMemory3(intnum){char*p(ch

c++函数返回值来传递动态内存问题
下面这2个方法可以重新给str分配内存  

char   *GetMemory3(int   num)  
{  
char   *p   =   (char   *)malloc(sizeof(char)   *   num);  
return   p;  
}  
void   Test3(void)  
{  
char   *str   =   NULL;  
str   =   GetMemory3(100);  
strcpy(str,   "hello ");  
cout < <   str   < <   endl;  
free(str);  
}  


下面这2个却不能,说函数返回的是栈内存,将自动消亡!难道上面那个函数不是栈内存,不会自动消亡吗?  
问题补充:不是说函数的局部变量都是在栈内存中申请的吗?  
那么方法一中的   char   *p不是局部变量,不是在栈内存中吗?

char   *GetString(void)  
{  
char   p[]   =   "hello   world ";  
return   p;   //   编译器将提出警告  
}  
void   Test4(void)  
{  
char   *str   =   NULL;  
str   =   GetString();   //   str   的内容是垃圾  
cout < <   str   < <   endl;  
}



[解决办法]
p所占的4个字节的内存是栈内存,
p的值(地址值)指向的内存是段堆内存
希望说清楚了