【发布时间】:2013-06-21 15:22:25
【问题描述】:
我的程序中有一个特定的类,我用它来绘制各种形状并为形状添加事件。
vector<XQuad*> _inputMappedShape;
void addRegularShape(Container inputPoints, Container outputPoints){
XQuad quad;
setInputPoints(quad, somePoints);
setInputPoints(quad, somePoints);
setArrowHandles(quad, somePoints);
_inputMappedShape[currentIndex++] = &quad;
}
XQuad* getMappedShape(int index){
return _inputMappedShape[index];
}
void setInputPoints(XQuad& quad, Point* somePoints);
void setOutputPoints(XQuad& quad, Point* somePoint);
void setArrowHandles(XQuad& quad, Point* somePoint);
请注意,在上面的代码中(在方法addRegularshape 中),在将quad 添加到vector 集合之前,我通过引用其他方法传递了quad。
在我的主程序中,我尝试使用 getMappedShape 方法检索形状,该方法将返回一个指向四边形的指针以用于我的目的。 XQuad* returnedShape = getMappedShape(0)
我检查了addRegularShape方法中分配的quad的内存地址和指针返回的地址(来自方法getMappedShape)和内存地址是一样的。
但是,不知何故,当从getMappedShape 返回时,我的XQuad 类中的数据不正确(即不是在其他三个成员函数中的 XQuad 引用对象中修改的数据),而是有一些垃圾值。我找不到发生这种情况的原因,并且怀疑内存损坏或其他原因,我将addRegularShape中的引用对象更改为指针,如下所示。XQuad* quad = new XQuad();
在此之后,程序开始返回正确的值,但我仍然有点怀疑它为什么会发生?添加 XQuad 对象不是将地址添加到集合的正确方法吗?或者这里是否存在一些范围问题,即当方法超出范围时,对象被销毁并且我从集合中实际返回的内容现在变成了垃圾值?
【问题讨论】: