Code Fix

中級関数内のローカル変数のアドレスを返すと解放済み領域を指す › パターン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

空欄を埋めてコンパイル・実行を通す

広告
広告スロット(未設定)

関数内のローカル変数のアドレスを返すと解放済み領域を指す

そのアドレスをreturnで返すと、呼び出し元は既に無効な領域を指すポインタを受け取ります。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)