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
}

我一直在 Internet 上寻找原因,但只能找到有关名为“release”的标志的文本。

有人可以帮助我吗?

谢谢。

4

2 回答 2

1

我假设当您说“发送 m 矩阵”时,您是在客户端。

我认为第一段代码是正确的。如果您有内存泄漏,这可能是由于您正在使用的 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 回答