在char ** function()中,char数组的动态分配会产生不希望的结果

时间:2016-10-03 14:00:54

标签: c++

这是我的C ++代码 据我说,它应该给出输出:
ABC
垃圾
ABC

但它正在提供输出:
ABC
垃圾
垃圾

#include<bits/stdc++.h>
using namespace std;


char **func()
{
char* PA = new char[10];
PA[0]='a';
PA[1]='b';
PA[2]='c';
PA[3]='\0';

printf("%s\n",PA);
printf("Garbage\n");

char **PPA = &PA;
return PPA;

}

int main()
{
 printf("%s\n",*func());
 return 0;
}

我在哪里做错了?

1 个答案:

答案 0 :(得分:3)

char **PPA = &PA;

检索变量PA自身的地址,这是一个自动变量,一旦函数终止就会超出范围。这意味着你在这里有未定义的行为。 C标准不保证任何一致的行为,因此可能发生任何事情,包括您所经历的事情。

要解决此问题,您可以将函数原型更改为char* func()并直接返回PA并完全删除PPA