中級 › 関数内のローカル変数のアドレスを返すと解放済み領域を指す › パターン3
関数内のローカル変数のアドレスを返すと解放済み領域を指す
関数の中で宣言したローカル変数は、その関数を抜けると同時に領域が無効になります。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int *makeFlag(int v) { 5 int flag = v; 6 int *heap = malloc(sizeof(int)); 7 *heap = v; 8 return _____; ^ 9 } 10 11 int main(void) { 12 int *f = makeFlag(1); 13 printf("%d\n", *f); 14 return 0; 15 }
Segmentation fault
空欄を埋めてコンパイル・実行を通す
関数を抜けた直後は運よくクラッシュしないこともありますが、別の関数呼び出しを挟むと高い確率で同じ領域が上書きされます。
次の問題