2012-08-10 83 views
1

我在CORBA中的序列序列有問題。我可以通過一個非優雅的解決方案來解決問題(至少對我來說不夠高雅)。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 
} 

我一直在尋找互聯網的原因,我只能找到關於名爲「release」的標誌的文本。

有人可以幫我嗎?

謝謝。

+0

請提供更多信息。請爲IDM顯示'IntMatrix'和'IntSeq'。這個代碼是在服務器還是客戶端上運行? – 2012-08-10 12:49:33

回答

1

我假設當你說「發送米矩陣'你在客戶端。

我認爲第一段代碼是正確的。如果你有內存泄漏,這可能是由於你正在使用的ORB實現中的一個錯誤。

+0

您認爲在我的情況下最好的解決方案是什麼? – 2012-08-29 07:23:59

+0

只需修補您的ORB。如果您發送電話並泄漏泄漏,則問題出在您的ORB上。我知道這發生在一些ACE TAO版本中。 – 2012-08-29 07:26:44

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();