我有這樣的結構,內存泄漏STRUCT C++
struct int * ramp_output (int * L10)
{
int * r;
r = L10;
return(r);
}
我應該擺脫L10和r存儲器?
我有這樣的結構,內存泄漏STRUCT C++
struct int * ramp_output (int * L10)
{
int * r;
r = L10;
return(r);
}
我應該擺脫L10和r存儲器?
首先,你的代碼不會與那裏的雜散「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!
}
所有其他人自己清理後,
謝謝!這真太了不起了。 – user2188050 2013-03-19 19:41:36
結構不帶參數或返回值。如果你從代碼中刪除了「struct」,這將是有效的(儘管很簡單)函數:它只是返回一個指針,它指向的參數是一個指針。您不需要或不想釋放任何內存。
非常感謝你! – user2188050 2013-03-19 19:43:31
作爲一般規則,您只需要使用C++語言釋放內存就是使用「new」關鍵字創建它的時候。例如,
int * test = new int;
在這種情況下,指針「test」指向「某人」應該刪除的堆上的一個整數。誰負責刪除它取決於程序的設計,如果您將指針傳遞給其他函數並且它們存儲/使用它的副本,則不應該將其刪除。
至於你的示例代碼,它沒有任何意義,所以你必須告訴我們你想要做什麼,以幫助完成。
謝謝!這非常有幫助。 – user2188050 2013-03-19 19:41:58
這大約有2000種錯誤 - 沒有像struct int這樣的東西,沒有這樣的東西作爲結構有回報。 – KevinDTimm 2013-03-19 19:27:02
你想做什麼?你真的編碼和編譯這些東西嗎? – Ajay 2013-03-19 19:28:32
@KevinDTimm我認爲他想要一個返回結構的函數? – Tushar 2013-03-19 19:29:53