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 = &currentValue;

    //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++没有动态变量。