考虑以下代码。
#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
四个不同的地方。那为什么我使用Visual C++时代码没有崩溃呢?
我错过了什么吗?