操作
バグ #3708
未完了SimpleIOサンプルのConnectorComp.cppにおける初期化処理の修正
開始日:
2016/11/15
期日:
進捗率:
100%
予定工数:
説明
下記投稿への対応
[openrtm-users 03328] Ubuntu 14.04,OpenRTM C++ 1.1.xでSimpleIO ConnectorCompを実行するとinvalid pointerコアダンプが発生する
環境: Ubuntu 14.04.5 LTS Linux 4.4.0-36-generic gcc 4.8.4 omniORB 4.1.6-2 OpenRTM-aist C++版 ソースコード OpenRTM-aist-1.1.2.tar.gz をベースに記述いたします. 初回コンパイルを終えると, examples/SimpleIO/以下で./run.shを実行するとサンプルプログラムが実行されるかと思います. このときConnectorCompの実行時に, Name Server: localhost:9876 Subscription Type: flush push policy: skip count: connect: ConsoleIn -> ConsoleOut *** Error in `(略)/examples/SimpleIO/.libs/lt-ConnectorComp': free(): invalid pointer: 0x000000000040864b *** のようにinvalid pointerエラーが発生します. 具体的には,ConnectorComp.cppの275行目, ReturnCode_t ret; if (connect_origin == "in") { ret = pin[(CORBA::ULong)0]->connect(prof); } のconnect時にエラーが発生しています. 表面的な原因を調査しましたところ, OpenRTM-aist 1.0.2でSimpleIOを実行した際にはエラーは発生せず, 同226行目 prof.connector_id = (char*)""; の部分が,OpenRTM-aist 1.0.xでは, prof.connector_id = ""; となっていました. 1.1.0や1.1.2でも同じく(char*)を削除するとエラーなく実行できました.
n.kawauchi さんが約8年前に更新
- 進捗率 を 0 から 100 に変更
connector_idは、構造体 RTC::ConnectorProfile の UniqueIdentifier型のメンバ変数で、下記定義よりstring型のため、
CORBA::string_dupを使って初期化した。
typedef SDOPackage::UniqueIdentifier RTC::UniqueIdentifier
typedef string SDOPackage::UniqueIdentifier
操作