これら2例についてはされて私の質問:C - ローカル変数の対ローカルポインタを返す
#include <stdio.h>
int *foo1();
int *foo2();
int main()
{
printf("so it's %d\n",*foo1());
printf("so it's %d\n",*foo2());
}
int *foo1()
{
int i1 = 5;
return &i1;
}
int *foo2()
{
int i2 = 5;
int *p = NULL;
p = &i2;
return p;
}
ケース1: foo1は()との場合は、我々は返すようにしようとしているため、エラーを取得するとその主なデータへのアドレスのコピーが削除されている(私たちは、foo1は()関数を終了したとき)
事例2:しかし、foo2は()で、それは、私たちがコピーを返却しているかかわらず、エラーを与えるものではありませんデータが削除されるローカル変数のポインタd foo2()関数を終了した後、なぜそうですか?
TL:DR:なぜfoo2()はエラーを出さないがfoo1()はなぜですか?
TIA。
CまたはC++へのポインタを返すことはできません。また、g ++、[両方に警告を与える](http://coliru.stacked-crooked.com/a/5ee45849a93cd26d) – NathanOliver
私は、* foo1 *がrvalueを返す間に* foo2 *はlvalueを返しています。これはポインタアドレス自体が無効であっても有効な戻り値です。 – abe
なぜダブルタグですか? – StoryTeller