Код, приведенный ниже, используется для извлечения int и длинного вектора символов. Тем не менее, я получаю ошибку о стека коррупции (см ниже код):Ошибка «Stack ........ была повреждена» при использовании memcpy
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;
}
Я получаю ошибку:
Run-Time Check Failure #2 - Stack around the variable 'pp.51040' was corrupted.
Может кто-то помочь мне понять, что происходит не так здесь, пожалуйста?
Вы уверены, что 8 бит в системе? Может быть, использование sizeof (long) или sizeof (pp) было бы хорошей идеей? –
Используйте 'sizeof pp' вместо жесткого кодирования. – Kninnug
'long' - 4 байта с MSVC. –