void* myfunction() {
char *p;
*p = 0;
return (void*) &p;
}
私はこの問題がreturn文にあることは知っていますが、混乱します。何かヒント?コードに何が問題なのですか?
ありがとうございました。
void* myfunction() {
char *p;
*p = 0;
return (void*) &p;
}
私はこの問題がreturn文にあることは知っていますが、混乱します。何かヒント?コードに何が問題なのですか?
ありがとうございました。
*p = 0;
のreturn文の前に問題があります。 p
を初期化していないので、これは、ユニット化されたポインタが保持するランダムな場所に書き込みます。それは未定義の振る舞いをしているので、後で何も意味のある解釈は全くありません。
これを修正した場合、return文も問題になります。返される前に破棄されたデータへのポインタが返されるため、返されたポインタを使用しようとすると、未定義の動作が再び発生します。
おそらくpがあなたのメモリをまだ割り当てられていません。そして、* pはメモリ違反となる可能性があります。 –
ローカル変数を返していますが、これは良くありません。 – Peter
@Peter:ローカル変数の値を返すことは問題ではありません。ローカル変数のアドレス*を返す(ここのように) - あなたの結論は正しいが、問題の説明は正しくない。 –