这是我的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;
}
我在哪里做错了?
答案 0 :(得分:3)
char **PPA = &PA;
检索变量PA
自身的地址,这是一个自动变量,一旦函数终止就会超出范围。这意味着你在这里有未定义的行为。 C标准不保证任何一致的行为,因此可能发生任何事情,包括您所经历的事情。
要解决此问题,您可以将函数原型更改为char* func()
并直接返回PA
并完全删除PPA
。