释放错误后堆使用
Heap use after free err
在Leetcode中出现免费错误后使用堆,似乎不了解根本原因。你们能帮我吗?
大多数情况下,所有内容都是在堆栈上声明的。我唯一怀疑的是我在堆栈multiset temp上创建的浅拷贝,但你不能释放堆栈上的任何东西,对吧?
class Solution {
public:
void earn_points(multiset<int> points,int currpoint, int& max){
set<int> unique;
if(points.size() == 0){
cout <<"finalscore="<< currpoint << " "<<endl;
if(currpoint > max){
max = currpoint;
}
}
multiset<int> temp = points;
for(auto it=points.begin(); it != points.end(); ++it){
int num = *it;
if(unique.find(num) != unique.end()){
continue;
}
unique.insert(num);
int delete_num1 = num + 1;
int delete_num2 = num - 1;
points.erase(it);
if(points.find(delete_num1) != points.end())
points.erase(delete_num1);
if(points.find(delete_num2) != points.end())
points.erase(delete_num2);
cout << num <<" ";
for(auto i : points){
cout << i <<" ";
}
cout << endl;
earn_points(points,currpoint + num,max);
points = temp;
}
}
int deleteAndEarn(vector<int>& nums) {
multiset<int> points(nums.begin(),nums.end());
int max = INT32_MIN;
earn_points(points,0,max);
return max;
}
};
您的问题最有可能出现在这里:
points.erase(it);
if(points.find(delete_num1) != points.end())
points.erase(delete_num1);
if(points.find(delete_num2) != points.end())
points.erase(delete_num2);
当你从多集合中擦除东西时,它会使迭代器无效,所以当你点击迭代器引用你在for。。。循环您引用的内容已不存在。
相关文章:
- 释放错误后堆使用
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 使用全局声明的向量时,C++双重释放错误/损坏
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 错误:"释放后使用包装器对象 (WRAPPER_ESCAPE)"
- 释放动态内存时C++错误
- 双重释放或损坏(输出)和中止(核心转储)错误
- AddressSanitizer 将 std::vector<T>::p ush_back 标识为释放后堆使用错误的原因
- 如何修复对象在释放后可能修改的malloc错误
- 错误:释放指针未分配在矢量模板类C 中
- 在函数内部错误定位后,从函数中释放返回的指针会导致芯片崩溃
- 双重释放或损坏错误(找不到错误?
- 删除指针时,未分配被释放的 C++ 指针错误
- 对于我的类函数,我得到双重释放或损坏错误
- 删除[]是否可以与通用数组正常使用?如果是这样,为什么使用std :: vector ::擦除它会导致释放内存的错误
- 为什么会出现错误:未分配正在释放的指针
- 循环链表的内存错误:未分配正在释放的指针
- C++复制构造函数上的双重释放错误
- C ++对象给了我一个错误:未分配正在释放的指针
- malloc: 对象 0x00 的 *** 错误:未分配正在释放的指针