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的值(地址值)指向的内存是段堆内存
希望说清楚了
c++函数返回值来传递动态内存有关问题
c++函数返回值来传递动态内存问题下面这2个方法可以重新给str分配内存char*GetMemory3(intnum){char*p(ch
