Рассмотрим следующий код.Разница в поведении (GCC и Visual C++)
#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, чтобы проверить, что на самом деле проблема, я получил this output.
Я получил Invalid write of size 4
в четырех разных местах. Тогда почему не произошел сбой кода, когда я использовал Visual C++?
Я что-то упустил?
Вам не нужно выделять достаточное пространство в векторе, прежде чем использовать его?Это чистая авария или, возможно, просто другая, более удобная, но менее стандартная реализация 'vector <>'. –
Какая IDE, которую вы используете, не очень полезная информация. Какие версии соответствующих компиляторов вы используете, более уместно. –
@Dennis: Я использовал gcc 4.3 и MSVC++ 2008 –