Code Fix

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

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

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

 1  #include <iostream>
 2  int& getRef() {
 3      __________ local = 42;
             ^
 4      return local;
 5  }
 6  int noise() {
 7      int junk[8] = {1,2,3,4,5,6,7,8};
 8      return junk[0];
 9  }
10  int main() {
11      int& r = getRef();
12      noise();
13      std::cout << r << std::endl;
14      return 0;
15  }
Segmentation fault

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

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

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

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

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

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