用地址设置后是否需要删除指针?

时间:2014-06-09 19:37:13

标签: c++ pointers memory-address delete-operator

我有一个叫做输入的课程。 如果我有2个变量

Input inp;

Input* inp2;

我做了类似的事。

inp2 = &inp;

是否有必要使用delete inp

删除此指针

当我尝试在我的应用程序中删除它时

我遇到了运行时错误,所以我不确定这里发生了什么。

5 个答案:

答案 0 :(得分:3)

任何堆内存分配(如newmalloc)最终都应由delete / free释放。

FreeDelete不得用于任何其他地址。

答案 1 :(得分:2)

这实际上是否编译。

使用delete时,您只能使用new。使用delete[]时,new[]同上。

答案 2 :(得分:1)

  

是否有必要使用delete inp

删除此指针

首先,你的意思是删除一个被指向的变量,而不是指针(指针放在堆栈上,迟早会超出范围),所以

delete inp2

第二 - 否。您只能对使用delete分配的变量拨打new

  

因为operator new的默认版本是通用的   分配器,它必须准备分配任何大小的块。   同样,必须准备默认版本的operator delete   解除分配任何大小运算符新分配的块。对于   运算符delete要知道要释放多少内存,它必须具有   某种方式可以知道新分配的内存运算符数量   第一名。操作员new告诉操作员删除方式的常用方法   它分配的大量内存是通过预先返回的内存   一些额外的数据,指定分配块的大小。

operator delete需要operator new

创建的信息

答案 3 :(得分:0)

考虑

int inp = 1;
int *inp2 = &inp;

这里的inp和inp2都是具有自动存储持续时间的堆栈变量,并且在当前复合语句/函数结束时将超出范围......

如果设置/重置inp2的值,即

int inp = 1;
int *inp2 = &inp;
int inp3 = 3;
inp2 = &inp3;

除了重新分配任何基本类型之外,你没有做任何其他事情。您只需更改局部变量(类型int*)的值。 没有手动/动态内存分配。

delete用于释放内存(使用new分配)并且必须应用于指针,指向使用new分配的内存位置。

int * inp4 = new int;
// ...
delete inp4;

答案 4 :(得分:-1)

使用free()删除它,因为你正在为它分配内存静态删除是动态内存分配malloc calloc等