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