Code Fix

上級ローカル変数への参照を返すとSegmentation faultになる原因 › パターン2

ローカル変数への参照を返すとSegmentation faultになる原因

関数のローカル変数への参照を関数の外に返してしまうバグです。

 1  #include <iostream>
 2  int& getValue() {
 3      __________ temp = 99;
             ^
 4      return temp;
 5  }
 6  int fill() {
 7      int buffer[8] = {9,9,9,9,9,9,9,9};
 8      return buffer[0];
 9  }
10  int main() {
11      int& v = getValue();
12      fill();
13      std::cout << v << std::endl;
14      return 0;
15  }
Segmentation fault

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

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

ローカル変数への参照を返すとSegmentation faultになる原因

関数を抜けた時点でローカル変数の実体は破棄されるため、返された参照は存在しないメモリを指すことになります。

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

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