下面的代码用于从字符向量中提取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'进行堆叠 损坏。
有人可以帮我理解这里出了什么问题吗?
答案 0 :(得分:2)
My_Vector[25]
不是字节25.它是字节26。
此外,您没有检查sizeof(long) == 8
或sizeof(int) == 4
(事实上,现在这种情况不常见。)