1

CORBAのシーケンスのシーケンスに問題があります。私は非エレガントな解決策で問題を解決することができました(少なくとも私にとってはエレガントではありません)。

メモリリークを生成する(実際ではない)コードは次のようなものです。

{
   IntMatrix m;
   m.lenght(100);
   for (int i = 0; i < 100; i++)
   {
      m[i].lenght(99);
   }
   //Send 'm' matrix and exit from this scope
}

(エレガントではない)ソリューションは次のようなものです:

{
  IntMatrix m;
  m.lenght(100);
  intSeq s;
  s.lenght(99);
  for (int i = 0; i < 100; i++)
  {
      m[i] = s;
  }
  //Send 'm' matrix and exit from this scope
}

私はインターネットで原因を探していましたが、「リリース」という名前のフラグに関するテキストしか見つかりませんでした。

誰かが私を助けることができますか?

ありがとう。

4

2 に答える 2

1

「Sendmmatrix」と言うときはクライアント側にいると思います。

最初のコードは正しいと思います。メモリリークがある場合は、使用しているORB実装のバグが原因である可能性があります。

于 2012-08-21T13:12:06.900 に答える
0

サーバー実装からシーケンスのシーケンスを返そうとしていると仮定します。

その場合、IDLからC ++へのマッピングでは、シーケンスを「更新」する必要があります。

次のようなものを試してください。

IntMatrix_var m = new IntMatrix;
m->length(100);
for (CORBA::ULong i = 0; i < m->length(); ++i)
{
   m[i].length(99);
   for (CORBA::ULong j = 0; j < m[i].length(); ++j)
   {
      m[i][j] = someValue;
   }
}
return m._retn();
于 2012-08-17T00:23:21.560 に答える