我有这样的结构,内存泄漏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