我有一个叫做输入的课程。 如果我有2个变量
Input inp;
和
Input* inp2;
我做了类似的事。
inp2 = &inp;
是否有必要使用delete inp
当我尝试在我的应用程序中删除它时
我遇到了运行时错误,所以我不确定这里发生了什么。
答案 0 :(得分:3)
任何堆内存分配(如new
和malloc
)最终都应由delete
/ free
释放。
Free
和Delete
不得用于任何其他地址。
答案 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等