2012-05-11 4 views
2
void* myfunction() { 
char *p; 
    *p = 0; 
    return (void*) &p; 
} 

私はこの問題がreturn文にあることは知っていますが、混乱します。何かヒント?コードに何が問題なのですか?

ありがとうございました。

+0

おそらくpがあなたのメモリをまだ割り当てられていません。そして、* pはメモリ違反となる可能性があります。 –

+0

ローカル変数を返していますが、これは良くありません。 – Peter

+2

@Peter:ローカル変数の値を返すことは問題ではありません。ローカル変数のアドレス*を返す(ここのように) - あなたの結論は正しいが、問題の説明は正しくない。 –

答えて

8

*p = 0;のreturn文の前に問題があります。 pを初期化していないので、これは、ユニット化されたポインタが保持するランダムな場所に書き込みます。それは未定義の振る舞いをしているので、後で何も意味のある解釈は全くありません。

これを修正した場合、return文も問題になります。返される前に破棄されたデータへのポインタが返されるため、返されたポインタを使用しようとすると、未定義の動作が再び発生します。

+0

右、ありがとう! – Rafal

+0

@ BloodyHell666、この回答があなたの問題の解決に役立った場合は、[同意する]ボタンをクリックして回答を受け入れる必要があります。 – Jay

+0

申し訳ありません、ここは新しいです。 – Rafal

関連する問題