2014-10-30 74 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