Code Fix

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

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

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

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

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

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

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

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

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

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