2
我正在從我的程序的輸出如下:C++無法找到錯誤,雙重釋放或腐敗(fasttop)
$ ./list
Enter list 1: [1,2,3,4]
[
Enter list 2: [2,5,8,0]
[
[1,2,3,4]
[1,2,3,4]
*** Error in `./list': double free or corruption (fasttop): 0x0000000000f85100 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x80a46)[0x7fa0368d6a46]
./list[0x400d5f]
./list[0x400c62]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fa036877ea5]
./list[0x400ae9]
======= Memory map: ========
00400000-00402000 r-xp 00000000 ca:01 410613 /home/ubuntu/list
...
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
the endAborted (core dumped)
這是我主要有:
int main(){
pennlist::List l1,l2;
cout<<"Enter list 1:\t";
cin>>l1;
cout<<"Enter list 2:\t";
cin>>l2;
cout<<l1<<endl<<l2<<endl;
cout<<"the end";
}
而這是這個超載>>操作符。
istream& operator >>(istream& ins, List& write_me){
char discard;
write_me.head = new node;
write_me.current = write_me.head;
node* temp = write_me.head;
ins>>discard;//get [
cout<<discard<<endl;
while(discard != ']'){
ins>>temp->data;
write_me.count += 1;
temp->to_tail = new node;
temp->to_head = temp;
temp = temp->to_tail;
ins>>discard; //get , or ]
}
write_me.tail = temp;
temp = NULL;
return ins;
}
我已經重載了=,〜和copy ctr,並且在添加這些函數之前和之後得到相同的錯誤。
我無法弄清楚如何解決這個錯誤,請幫助。
編輯
Here is the code for the destructor:
~List{
delete head;
delete current;
delete tail;
}
我打電話刪除唯一的一次是在pennlist ::表::〜名單 { 刪除頭; 刪除當前; 刪除尾巴; } hmm。會刪除頭像;並刪除當前;如果他們指向同一地點,會發生衝突嗎? –
答案是肯定的。謝謝! –
您應該將導致問題的代碼添加到您的OP中,然後回答您自己的問題,以便其他人可以從該解決方案中學習。另外,我可以推薦Valgrind(http://valgrind.org/)作爲追蹤這樣的內存問題(以及其他更復雜的問題,如內存泄漏)的好工具。 – CmdrMoozy