gpt4 book ai didi

c++ - 具有动态分配内存的 vector 无法删除最后一个

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:20 25 4
gpt4 key购买 nike

在我的代码中,我有一个包含整数的 vector 。使用第一个循环,我创建了 100 个新整数并将它们压入 vector 。下一个循环然后删除所有动态分配的整数,最后一个除外,因为删除最后一个整数会导致错误并返回 0xc0000005。为什么我的程序会因删除最后一个整数而崩溃?

#include <iostream>
#include <vector>

using namespace std;

int main()
{
vector<int> list;

cout << list.size() << endl;

int i = 0;
while(i!=100)
{
list.push_back(*(new int(12)));
i++;
}

cout << list.size() << endl;

i=0;
while(i!=99)
{
delete &list.back();
list.pop_back();
i++;
}
/*
delete &list.back();

list.pop_back();
*/
cout << list.size() << endl;

return 0;
}

最佳答案

您并没有按照自己的想法行事。被插入 vector 的是不是动态分配的int,而是动态分配的int值的拷贝。

关于这部分

list.push_back(*(new int(12)));

您在堆上创建一个值为 12 的新 int,然后将其 复制到 vector 中。所以你不能这样做

delete &list.back();

关于整数

您必须获取值的地址这一事实应该告诉您它实际上不是一个指针。


如果你想存储指针然后使用

vector<int*> list;
^^

然后按赞

list.push_back(new int(12));

你可以删除为

delete list.back();

但是不要这样做。无需动态分配 int。使用

vector<int> list;
list.push_back(12);
// Nothing needs to be deleted.

关于c++ - 具有动态分配内存的 vector 无法删除最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com