2013-11-28 4 views
0

Код, приведенный ниже, используется для извлечения 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.

Может кто-то помочь мне понять, что происходит не так здесь, пожалуйста?

+3

Вы уверены, что 8 бит в системе? Может быть, использование sizeof (long) или sizeof (pp) было бы хорошей идеей? –

+1

Используйте 'sizeof pp' вместо жесткого кодирования. – Kninnug

+0

'long' - 4 байта с MSVC. –

ответ

2

My_Vector[25] не является байт 25. Это байт 26.

Кроме того, вы не проверив, что sizeof(long) == 8 или sizeof(int) == 4 (на самом деле, это было бы необычно в наше время).

+0

Извините, что я просто сбивал с толку байт # с векторным индексом - он по-прежнему прав, что мне нужно My_Vec [25] для My_Vec [32] – user997112

Смежные вопросы