2013-03-19 86 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