Код, приведенный ниже, используется для извлечения int и long из вектора символов. Тем не менее, я получаю сообщение об ошибке в стеке (см. Ниже код):
std::vector<boost::shared_ptr<MyClass> > foo(std::vector<char> My_Vector){
std::vector<boost::shared_ptr<MyClass> > y;
long p;
int q;
long pp;
int qq;
//pp is being set to the value of bytes 26 to 33 from My_Vector
memcpy( &pp, &My_Vector[25], 8);
memcpy( &qq, &My_Vector[19], 4);
q = qq;
p = static_cast<double>(pp)/1E8;
boost::shared_ptr<MyClass> x(new MyClass(p,q));
y.push_back(x);
return y;
}
Я получаю сообщение об ошибке:
Ошибка проверки времени выполнения # 2 - поврежден стек вокруг переменной "pp.51040".
Может ли кто-нибудь помочь мне понять, что здесь не так, пожалуйста?
My_Vector[25]
не является байтом 25. Это байт 26.
Кроме того, у вас нет проверки того, что sizeof(long) == 8
или sizeof(int) == 4
(на самом деле это было бы необычно в наши дни).
sizeof pp
вместо жесткого кодирования.