Code Fix

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

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

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

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

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

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

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