2013-03-19 118 views
-6

我有這樣的結構,內存泄漏STRUCT C++

struct int * ramp_output (int * L10) 
{ 
    int * r; 
    r = L10; 
    return(r); 
} 

我應該擺脫L10和r存儲器?

+9

這大約有2000種錯誤 - 沒有像struct int這樣的東西,沒有這樣的東西作爲結構有回報。 – KevinDTimm 2013-03-19 19:27:02

+1

你想做什麼?你真的編碼和編譯這些東西嗎? – Ajay 2013-03-19 19:28:32

+2

@KevinDTimm我認爲他想要一個返回結構的函數? – Tushar 2013-03-19 19:29:53

回答

0

首先,你的代碼不會與那裏的雜散「struct」一起編譯。刪除,我們可以回答你的問題:它取決於如何分配參數,但在任何情況下,你應該只做一次。

int main() 
{ 
    int a[] = { 1, 1, 1 }; 
    int i = 42; 
    int* pi1 = &i; 
    int* pi2 = new int[10]; 
    int* pi3 = new int(42); 
    std::vector<int> v(10); 
    std::shared_ptr<int> sp(new int(42)); 

    int* r1 = ramp_output(a); 
    int* r2 = ramp_output(&i); 
    int* r3 = ramp_output(pi1); 
    int* r4 = ramp_output(pi2); 
    int* r5 = ramp_output(pi3); 
    int* r6 = ramp_output(&v[0]); 
    int* r7 = ramp_output(sp.get()); 

    // what to dealloc? Only these 
    delete [] pi2; // or delete [] r4; but not both! 
    delete pi3; // or delete r5; but not both! 
} 

所有其他人自己清理後,

+0

謝謝!這真太了不起了。 – user2188050 2013-03-19 19:41:36

0

結構不帶參數或返回值。如果你從代碼中刪除了「struct」,這將是有效的(儘管很簡單)函數:它只是返回一個指針,它指向的參數是一個指針。您不需要或不想釋放任何內存。

+0

非常感謝你! – user2188050 2013-03-19 19:43:31

0

作爲一般規則,您只需要使用C++語言釋放內存就是使用「new」關鍵字創建它的時候。例如,

int * test = new int; 

在這種情況下,指針「test」指向「某人」應該刪除的堆上的一個整數。誰負責刪除它取決於程序的設計,如果您將指針傳遞給其他函數並且它們存儲/使用它的副本,則不應該將其刪除。

至於你的示例代碼,它沒有任何意義,所以你必須告訴我們你想要做什麼,以幫助完成。

+0

謝謝!這非常有幫助。 – user2188050 2013-03-19 19:41:58