我看过很多关于此错误的帖子。但我不是动态保留内存或在析构函数中做任何事情: 该程序是SSJF算法,用于在操作系统中选择气缸。
我有一个名为IO的简单类:
class IO
{
public:
IO();
IO(int,int);
void setIO(int,int);
~IO();
int trackNo;
int arrival;
int start;
int end;
bool finished;
};
这是class ::
的实现IO::IO(int arr, int tNum)
{
this->arrival = arr;
this->trackNo = tNum;
this->start = 0;
this->end = 0;
}
IO::IO()
{
}
IO::~IO()
{
}
void IO::setIO(int t1, int t2)
{
this->trackNo = t1;
this->arrival = t2;
}
最后这是主程序的一部分:
list<IO> myList;
....
myList.push_back(tmpIO); //Add to the list
...
list<IO> wt_list;
后来我正在尝试做一些操作。我删除了一些与之无关的部分。
//list<IO>::iterator itMin;
while(myList.size()>0)
{
//If it is the first input just get it
if(f)
{
IO selected = myList.front();
curr_time += selected.arrival + selected.trackNo;
f=false;
cout << selected.arrival<<endl;
lastPos = selected.trackNo;
myList.pop_front();
}
//Check if there is any item to add to queue
while(myList.front().arrival < curr_time)
{
wt_list.push_back(myList.front());
myList.pop_front(); //Error is coming from this line
}
while(wt_list.size()>0)
{
}
错误讯息:
malloc: *对象0x10f68b3e0的错误:未分配被释放的指针 * 在malloc_error_break中设置断点以进行调试
任何人都可以帮助我并解释为什么我会收到此错误,我该如何跳过它?
答案 0 :(得分:1)
我可以用来重现此错误的最简单的代码如下所示:
#include <list>
int main()
{
std::list<int> mylist;
mylist.pop_front();
}
我可以通过执行以下操作来防止错误:
#include <list>
int main()
{
std::list<int> mylist;
if (!mylist.empty())
{
mylist.pop_front();
}
}
你在打电话:
myList.pop_front();
...在while
- 循环内,而循环又在while
循环内,也称为myList.pop_front()
。
我只能建议您调试代码,以查看为pop_front()
调用mylist
的次数。我的资金超过mylist.size()
次,hence my question in the comments(重点突出):
引发错误时
myList
中有多少项 ?
也许最简单的解决办法就是取代......
//Check if there is any item to add to queue
while(myList.front().arrival < curr_time)
{
wt_list.push_back(myList.front());
myList.pop_front(); //Error is coming from this line
}
while(wt_list.size()>0)
{
}
...与...
while (!mylist.empty() && myList.front().arrival < curr_time)
{
wt_list.push_back(myList.front());
myList.pop_front();
}
while (!wt_list.empty())
{
}
...但是从你提供的片段中很难说出来。