Code Fix

中級関数内のローカル変数のアドレスを返すと解放済み領域を指す › パターン1

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

関数の中で宣言したローカル変数は、その関数を抜けると同時に領域が無効になります。

 1  #include <stdio.h>
 2  #include <stdlib.h>
 3  
 4  int *makeValue(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 = makeValue(42);
13      printf("%d\n", *p);
14      return 0;
15  }
Segmentation fault

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

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

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

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

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

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