バグ #569
完了
複合コンポーネントの要素コンポーネントを削除すると例外が発生する。(windows)
匿名ユーザー さんが15年以上前に追加.
15年以上前に更新.
説明
- 現象:
windows 版で 複数 RTC を起動し、RTSystemEditor でそれら複合する。
複合したコンポーネントを構成する要素コンポーネントを RTSystemEditor の SystemDiagramEditor から delete とすると "Composite.exe [704] でハンドルされていない Win32 の例外が発生しました。 " が発生する。
- 原因: (Linux 版では本現象は発生しませんでした。)
PeriodicECOrganization::remove_member で 例外が発生していました。
remove_member で vector である m_rtcMembers の要素を erase しているのですが、vector::erase() の挙動が g++ と vc++ で異なるなるようです。
for 文の初期化で vector::end() で末尾のイテレータを取得して比較していますが、 vc++ の場合、 erase() を実行した後は end() で末尾イテレータをの取得しなおす必要があります。
( 恐らく、erase() で削除して残った要素を詰めるための処理が g++ と vc++ で差異があると思われます。)
- 対策:
for 文の初期化のend()で取得したイテレータを使用し続けずに、毎回取得するようにしました。
- 確認:
Win32 の例外が発生しなくなりました。(Linux でも問題なく動作することを確認しました。)
他の形式にエクスポート: Atom
PDF