Ошибка «стек… был поврежден» при использовании memcpy

0

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

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

  • 3
    Вы уверены, что длина в вашей системе составляет 8 байт? Может быть, было бы неплохо использовать sizeof (long) или sizeof (pp)?
  • 1
    Используйте sizeof pp вместо жесткого кодирования.
Показать ещё 4 комментария
Теги:
stack
memcpy

1 ответ

2
Лучший ответ

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

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

  • 0
    Извините, что только я путаю байт # с индексом вектора - все еще правильно, что я хочу, чтобы My_Vec [25] равнялся My_Vec [32]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню