次のコードを検討してください。
#include <stdio.h>
#include <vector>
#include <iostream>
struct XYZ { int X,Y,Z; };
std::vector<XYZ> A;
int rec(int idx)
{
int i = A.size();
A.push_back(XYZ());
if (idx >= 5)
return i;
A[i].X = rec(idx+1);
return i;
}
int main(){
A.clear();
rec(0);
puts("FINISH!");
}
Linux (IDE 使用: Code::Blocks )でコードがセグメンテーション違反を起こす理由がわかりませんでしたが、Windows (IDE 使用: Visual C++ ) ではそうではありません。
実際に何が問題なのかを確認するためだけに Valgrind を使用したところ、この出力が得られました。
私はInvalid write of size 4
4つの異なる場所に行きました。では、Visual C++ を使用したときにコードがクラッシュしなかったのはなぜですか?
何か不足していますか?