使用memcpy时“堆栈........已损坏”错误

时间:2013-11-28 21:48:42

标签: c++ stack memcpy

下面的代码用于从字符向量中提取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'进行堆叠   损坏。

有人可以帮我理解这里出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

My_Vector[25]不是字节25.它是字节26。

此外,您没有检查sizeof(long) == 8sizeof(int) == 4(事实上,现在这种情况不常见。)

相关问题