上級 › ローカル変数への参照を返すと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
空欄を埋めてコンパイル・実行を通す
g++はこの種のミスに対して-Wreturn-local-addrという警告を出しますが、あくまで警告でありコンパイルは止まりません。static を付けてtempの寿命をプログラム終了まで延ばすのが直し方です。
次の問題