2013-08-16 68 views
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; 
} 
+0

我打電話刪除唯一的一次是在pennlist ::表::〜名單 { 刪除頭; 刪除當前; 刪除尾巴; } hmm。會刪除頭像;並刪除當前;如果他們指向同一地點,會發生衝突嗎? –

+0

答案是肯定的。謝謝! –

+1

您應該將導致問題的代碼添加到您的OP中,然後回答您自己的問題,以便其他人可以從該解決方案中學習。另外,我可以推薦Valgrind(http://valgrind.org/)作爲追蹤這樣的內存問題(以及其他更復雜的問題,如內存泄漏)的好工具。 – CmdrMoozy

回答

2

我改變了析構函數,程序現在可以正常工作。感謝大家。

~List{ 
    if (head != current && tail != current) 
     delete current; 
    if (tail != head) 
     delete tail; 
    delete head; 
} 
相關問題