2016-10-03 5 views
-2

これは私のC++コードです。
私によると、それは与える必要があり、出力:
ABC
ごみ
ABC

しかし、それは与えている出力:
ABC
ごみ
ごみchar ** function()では、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」のアドレスを返します。ローカル変数アドレスを返す – mch

+0

はUBです。期間。 –

+0

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

答えて

3
char **PPA = &PA; 

自動変数であるとすぐ関数が終了とスコープの外に出るの変数PA itsselfのアドレスを取得します。つまり、ここで未定義の動作があることを意味します。 Cの標準は一貫した動作を保証するものではありませんので、あなたが経験したことを含め、何かが起こる可能性があります。

これを修正するには、関数プロトタイプをchar* func()に変更し、PAを直接返し、PPAを完全に削除します。

+1

これはC++と想定されているので、std :: stringを使用してください。 – Peter

+0

Peterと合意してください - 非常に自暴自棄です。 C++はオブジェクト指向、Cはポインタ指向です。 – MSalters

関連する問題