中級 › 関数内のローカル変数のアドレスを返すと解放済み領域を指す › パターン4
関数内のローカル変数のアドレスを返すと解放済み領域を指す
関数の中で宣言したローカル変数は、その関数を抜けると同時に領域が無効になります。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int *makeId(int v) { 5 int local = v; 6 int *heap = malloc(sizeof(int)); 7 *heap = v; 8 return ______; ^ 9 } 10 11 int main(void) { 12 int *p = makeId(7); 13 printf("%d\n", *p); 14 return 0; 15 }
Segmentation fault
空欄を埋めてコンパイル・実行を通す
localは関数を抜けると無効になるスタック上の変数です。そのアドレスを返すとクラッシュにつながります。
次の問題