【发布时间】:2017-05-01 15:10:03
【问题描述】:
我是 C++ 新手,我使用代码块
1/指向指针的指针:
int **pp = new int*;
cout<<*pp<<endl;
{
int *p = new int;
pp = &p;
cout<< *pp<<endl;
}
之后,如果我写 delete pp 我有“.exe 已停止工作”。我想这是因为我尝试删除它指向的引用并且不允许这样做。我让pp 成为?我不能删除吗?如果我要创建大量指向指针的指针,我不会有内存泄漏的风险吗?
1/指针函数删除? 我有:
int* fct_ptr(int &a, int &b)
{
int* ptr=new int;
if (a>b)
ptr=&a;
else
ptr=&b;
return ptr;
}
如何释放用于fct_ptr 的指针?
写delete fct_ptr(int_value1, int_value2)够了吗?但我怀疑我的fct_ptr(int_value1, int_value2) 只是一个指针,它通过赋值获得其参数的引用,例如int* a=new int; int*b=a;,所以这意味着ptr 不能以这种方式删除......
所以如果我多次调用那个 fct 我不会有内存泄漏吗?
我可以写 int* ptr; 和 not int* ptr = new int*; 来解决这个问题。
但我想知道如何在不改变ptr的声明的情况下解决它
伯努瓦。
【问题讨论】:
-
您的
fnc_ptr错误并产生内存泄漏。您为ptr分配了内存,然后通过分配一个新的指针值丢弃了该值,因此永远没有机会释放内存。 -
当您执行
ptr = new ...; ptr = ...时,您将覆盖new返回的指针。那是内存泄漏。 -
这里的任何代码都没有引用。您正在获取变量的地址,这是 C 中完全有效的代码,它不支持引用。你需要一本好书。
-
@elan - 呃,仔细看看 fct_ptr 的签名。
-
@BenoîtLu:您根本不应该使用
new,除非您发现自己处于非常特殊的情况,而您还是初学者时甚至还没有接近遇到。使用std::vector、std::string、std::unique_ptr或 C++ 标准库提供的其他有用类。