2014-10-30 77 views
-1

嗨,我實現基本鏈表基於動態隊列類和運行測試,我得到當「總線錯誤:10」。我是新的使用終端(MAC OS X),我想一些幫助找出什麼是錯我的代碼或者也許我試圖運行的方式。它編譯好。使用鏈表動態隊列// BUS ERROR:10(C++)

鏈接代碼:

HEADER FILE

CPP FILE

TEST CODE:

// 
// Test Program 1 for Dynamic Int Queue Class 
// 
#include <iostream> // for I/O facilities 
#include "queue.h" // basic_int_queue declarations 
using namespace std; 

int main (int argc, char * const argv[]) { 

    bool OK = true ; 
    Queue q1 ; 
    if(! q1.empty()) OK = false ; 
    q1.enqueue(1); 
    if(q1.empty()) OK = false ; 
    q1.enqueue(2); 
    q1.enqueue(3); 
    q1.enqueue(4); 
    if(q1.front() != 1) OK = false ; 
    q1.dequeue(); 
    q1.dequeue(); 
    q1.dequeue(); 
    if(q1.front() != 4) OK = false ; 
    if(q1.dequeue() != 4) OK = false ; 
    if(! q1.empty()) OK = false ; 

    if(OK){ 
     cout << "GOOD" << endl ; 
     return 0 ; 
    }else{ 
     cout << "BAD" << endl ; 
     return -1 ; 
    } 
} 

THANK YOU!

+0

你可能會考慮使用編譯器選項'-g'生成調試信息,然後通過像'gdb'一個調試器中運行應用程序構建程序。它應該告訴你你的巴士錯誤在哪裏。 – 2014-10-30 03:16:21

回答

0

在您的queue.cpp文件enqueue實現中,您需要使用new在堆上分配新節點。例如,更改以下行的enqueue

node * temp; 
temp->next = NULL; 
temp->data = item; 

node * temp = new node(item, NULL); 

將擺脫總線錯誤的。

此外,在您的dequeue執行結束,你需要

delete temp;

return item;

否則delete temp;線可達,你有內存泄漏。

最後一件事,通常你應該

#include "queue.h"

queuen.cpp

。而不是相反。

+0

您的幫助是有用的,但現在我得到這樣的: >>用於建築x86_64的未定義符號: 「_main」,從引用: 隱含進入/啓動主可執行 LD:符號(S)未找到x86_64的架構 鐺:錯誤:連接命令,退出代碼1失敗(使用-v看到調用) 是什麼意思? – 2014-10-30 19:06:19

+0

貌似你試圖編譯只使用'queue.cpp'的可執行文件。您還需要在編譯命令中包含測試cpp文件(包含您在原始文章中粘貼的代碼的文件)。所以像'g ++ queue.cpp test.cpp'。 – hushaohan 2014-10-30 19:22:06