C++ 在何处放置动态变量的删除运算符
我正在试图找出在下面的程序中放置C++ 在何处放置动态变量的删除运算符,c++,pointers,memory-leaks,delete-operator,C++,Pointers,Memory Leaks,Delete Operator,我正在试图找出在下面的程序中放置delete指针语句的位置。我想清除指针所指向的内存空间,以避免内存泄漏。似乎无论我把它放在哪里,我都会得到一个错误声明: main(8282,0x7fff95d823c0) malloc: *** error for object 0x7fff582d3960: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug 我不知道如何解决这个
delete指针
语句的位置。我想清除指针所指向的内存空间,以避免内存泄漏。似乎无论我把它放在哪里,我都会得到一个错误声明:
main(8282,0x7fff95d823c0) malloc: *** error for object 0x7fff582d3960: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
我不知道如何解决这个问题。感谢您的帮助
完整代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
//initialize vector
vector<int> historyValues;
//initialize pointer and int variable
int *pointer;
pointer = new int;
pointer = 0;
int currentValue;
//make pointer point to the address of currentValue
pointer = ¤tValue;
//increment pointer by 1 for a total of 10 times.
//since pointer is pointing at currentValue, currentValue should change also.
//push back the current value of currentValue into the vector.
for (int i = 0; i < 10; i++) {
*pointer += 1;
historyValues.push_back(currentValue);
}
//print final results
cout << "currentValue: " << currentValue << endl;
cout << "*pointer: " << *pointer << endl;
cout << "History of integers stored in currentValue: ";
for (int i = 0; i < historyValues.size(); i++) {
cout << historyValues[i] << " ";
}
cout << endl;
cout << "Program finished" << endl;
return 0;
}
#包括
#包括
使用名称空间std;
int main(){
//初始化向量
向量历史值;
//初始化指针和int变量
int*指针;
指针=新整数;
指针=0;
int电流值;
//使指针指向currentValue的地址
指针=¤tValue;
//将指针增加1,总共增加10次。
//由于指针指向currentValue,currentValue也应该更改。
//将currentValue的当前值推回到向量中。
对于(int i=0;i<10;i++){
*指针+=1;
历史值。推回(当前值);
}
//打印最终结果
cout在这个程序中,指针
引用一个动态内存块时,唯一可以释放的地方是指针=new int;
和指针=0;
如果你在这两行之间移动删除指针
,你就没事了
更改的结果是:
pointer = new int;
delete pointer;
pointer = 0;
但是,您也可以删除所有这三行,从指针=¤tValue;
开始,因为您的代码从不使用动态分配的int
另外,您的注释“增量指针”不正确。您正在递增指针的目标,而不是指针。我试图用递增*指针
来间接更改当前值
的值。如果我去掉指针=new int;
和指针=0
,是否还会有内存泄漏?@HernanRazo:如果你取出new int
,就不会有泄漏。具有自动生存期的变量,如currentValue
,会在函数返回时自动释放。@Hernan我怀疑你误解了指针的一些内容:1)指针p
包含一个存储实际值的地址。2)你可以获取/设置t使用p
的地址或使用*p
的地址处的值。3)您可以动态分配内存(例如,使用new)并设置地址。4)但这不是设置地址(例如,设置p=
)的唯一方法。5)无论何时动态分配内存(new),您都应该在适当时释放它(delete).6)如果您在删除之前更改了地址,则无法再删除;以及leak@CraigYoung我不想重写而不首先确定我没有忽视一个有效的问题。既然你说这只是一个潜在的误解,我现在就澄清一下。注意C++没有动态变量。