操作
バグ #569
完了複合コンポーネントの要素コンポーネントを削除すると例外が発生する。(windows)
ステータス:
終了
優先度:
通常
担当者:
-
対象バージョン:
-
開始日:
2009/04/24
期日:
進捗率:
100%
予定工数:
説明
- 現象:
windows 版で 複数 RTC を起動し、RTSystemEditor でそれら複合する。
複合したコンポーネントを構成する要素コンポーネントを RTSystemEditor の SystemDiagramEditor から delete とすると "Composite.exe [704] でハンドルされていない Win32 の例外が発生しました。 " が発生する。
匿名ユーザー さんが15年以上前に更新
- ステータス を 新規 から 終了 に変更
- 原因: (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 でも問題なく動作することを確認しました。)
操作