2016-10-03 22 views
-2

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

但它给输出:
ABC
垃圾
垃圾在char **函数()中,char数组的动态分配给出了不希望的结果

#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; 
} 

我在哪里做错了?

+3

您返回本地变量'PA'的地址。返回的本地变量地址是UB – mch

+0

。期。 –

+0

http://stackoverflow.com/q/31816095/560648 –

回答

3
char **PPA = &PA; 

检索变量PA的itsself的地址,它是一个自动可变的,并且只要函数终止超出范围。这意味着你在这里有未定义的行为。 C标准不保证任何一致的行为,因此可能会发生任何事情,包括您遇到的情况。

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

+1

或者因为这应该是C++,使用std :: string – Peter

+0

同意彼得 - 非常自我造成的。 C++是面向对象的,C是面向指针的。 – MSalters

相关问题