2009-08-27 34 views
0

我有一個自己調用10次的函數。我正在使用QTimer進行重複呼叫。傳遞對象數組組成其他對象作爲函數的參考在C++中?

void DisplayClass::UpdateGuiWithData() 

{ 

//miscellaneous code which is validated 

SingletonObjectAsThread::instance()->UpdateFromGuiToExternalHardware(ClassOjbectArray,var1,var2); 

QTimer::singleShot(100,this,SLOT(UpdateGuiWithData())); 

} 


Class A_ComposingClass_B_Object 

{ 

//boolean and enum variables 

B ArrayOf_B_Objects[16]; 

} 

Class B 

{ 

//boolean and enum vairables 

} 

class DisplayClass 

{ 

//variables that are not a concern here 
UpdateGuiWithData(); 
A ArrayOfObject_A[4]; 

}; 

Class SingletonAsThread 

{ 

//vairables that are not a concern here 

UpdateFromGui(A_ComposingClass_B_Object*,const bool&,const bool&); 

}; 

這裏的交易,當我作爲代碼運行,存在內存大小穩步增加,但是當我註釋掉調用在UpdateGuiWithData類UpdateFromGui通話,內存保持在大約一個恆定水平51 MB。 UpdateFromGui函數沒有動態內存分配或GUI功能。它只是一個平面簡單的函數,它構造了數據包寫入串口,並被稱爲每秒10次,因爲這是硬件的刷新率。

我可以考慮增加內存的唯一原因是每次調用時將對象數組傳遞給UpdateFromGui函數。我認爲每次調用都會創建一個類對象的副本,從而增加內存。然後我試圖使用傳遞的對象數組作爲函數的引用,但找不到適合這樣的函數的聲明,儘管我找到了這樣一個函數的定義和用法。這是我在網上找到的。

//通過引用接收數組。

void GetArray(int (&Array) [10]) 

{ 

} 

// Test array by reference. 

void CRabbitDlgDlg::TestArray() 

{ 

    // Pass array by reference. 

    int Array[10] = { 0 }; 

    GetArray(Array); 

} 

我的問題是

--->我在想右邊線或者是一些與反覆的呼喚做獨居

類對象?

--->此外,我需要一個拷貝構造函數這裏A類,雖然有在這個類沒有動態

分配或指針變量?

--->還有什麼可以成爲這個內存泄漏的來源(如果不是它不是拷貝構造函數或單電話),它不斷地增加內存使用

應用

+0

傳遞指向數組的指針數組似乎不太可能導致內存泄漏。我認爲,要麼你根本沒有得到內存泄漏,反而會導致內存使用量增加,或者你正在做其他導致泄漏的事情。無論哪種方式,都需要更多的代碼。 – Goz 2009-08-27 06:06:20

回答

1

C和C++中的數組無法按照您所描述的方式工作。我們稱之爲「數組」的僅僅是一個內存區域,其中對象彼此相鄰,指向第一個對象的指針。當你傳遞一個函數的指針時,你只需傳遞一個整數。它指向的任何對象都被複制,並且它始終指向同一塊連續的內存塊。

你遇到的是一個真正的內存泄漏。你在某處分配內存,忘記釋放內存,當它不再需要時。或者你在不想要的地方輸入遞歸,並且每個函數都會分配一些內存。

而你的障礙很糟糕 - 我找不到聲明,你在代碼窗口後面談論的是你的聲明。

+0

@Pavel:我無法找到一個接受函數的對象數組的函數的聲明,這是我問過的其中一個問題? – rocknroll 2009-08-27 06:27:36

+0

你不能在一個運算符中用C和C++聲明一個函數指針數組。您可以使用typedef來定義一個函數指針類型,然後聲明該類型的數組,或者,而不是聲明一個數組,您只需聲明一個指向指針的指針即可。像這樣:int(** array_of_function_pointers)(); – 2009-08-27 07:42:51

+0

@pavel:對不起,隊友我的意思是「對象數組」而不是對象的函數數組。 – rocknroll 2009-08-27 08:13:02

相關問題