2026-08-20
greeting.c
const char *greeting(void) {
char msg[] = "hello";
return msg;
}
このコードはコンパイルできますが壊れています。何が問題で、どのように最小限の変更で直せるでしょうか?
答え
msgはローカル配列であり、greetingが返るときに破棄されるため、返されたポインタはダングリングポインタになります — その後で使用すると未定義動作です。関数呼び出しより長く生存する領域を与えてください:static const char msg[] = "hello"; return msg;