プログラムには、さまざまな図形を描画したり、図形にイベントを追加したりするために使用する特定のクラスがありました。
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);
上記のコード ( method 内) では、他のメソッドをコレクションに追加する前に参照addRegularshape
渡ししていることに注意してください。quad
vector
私のメイン プログラムではgetMappedShape
、目的のためにクワッドへのポインターを返すメソッドを使用して形状を取得しようとしていました。
XQuad* returnedShape = getMappedShape(0)
quad
メソッドで割り当てられたメモリアドレスとaddRegularShape
、ポインターによって返されるアドレス(メソッドからgetMappedShape
)を確認しましたが、メモリアドレスは同じでした。
しかし、どういうわけか、XQuad
から返されたときのクラス内のデータgetMappedShape
は正しくなく (つまり、他の 3 つのメンバー関数の XQuad 参照オブジェクトで変更されたものではない)、代わりにいくつかのガベージ値がありました。なぜそうなったのか原因がわかりませんでした。メモリが壊れているのではないかと疑い、addRegularShape
to ポインタの参照オブジェクトを次のように変更しました。
XQuad* quad = new XQuad();
これに続いて、プログラムは正しい値を返し始めましたが、なぜそれが起こったのかについてはまだ少し疑問がありますか? XQuad オブジェクトを追加することは、アドレスをコレクションに追加する正しい方法ではありませんでしたか? または、ここにスコープの問題がありますか。つまり、メソッドがスコープ外になると、オブジェクトが破棄され、コレクションから実際に返されるものがガベージ値になりましたか?