2014-10-30 3 views
-1

안녕하세요. 기본 연결 목록 기반 동적 대기열 클래스를 구현 중이며 테스트를 실행할 때 '버스 오류 : 10'이 발생합니다. 나는 터미널 (MAC OS X)을 사용하는 것이 새로운데, 코드를 잘못 이해했거나 실행하려고하는 방식을 찾는 데 도움이되고 싶습니다. 그것은 좋은 컴파일합니다. 코드링크 된 목록을 사용하는 동적 대기열 // BUS ERROR : 10 (C++)

링크 :

HEADER FILE

CPP FILE

테스트 코드 :

// 
// 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 ; 
    } 
} 

감사합니다!

+0

컴파일러 옵션'-g'로 프로그램을 빌드하여 디버그 정보를 생성 한 다음'gdb'와 같은 디버거를 통해 애플리케이션을 실행할 수도 있습니다. 버스 오류가 어디에 있는지 알려야합니다. –

답변

0

queue.cpp 파일 enqueue 구현에서 new을 사용하여 힙에 새 노드를 할당해야합니다. 예를 들어, 버스 오류를 제거합니다

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

enqueue

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

에 다음 줄을 변경.

또한, 귀하의 dequeue 구현의 끝에서, 당신은

return item;

전에

delete temp;

에 필요한 것은 그렇지 않으면 delete temp; 라인에 연결할 수 없습니다, 당신은 메모리 누수이있을 것이다 .

마지막으로 한가지, 일반적으로 당신이 당신의 queuen.cpp

#include "queue.h"

해야한다. 다른 방법은 아닙니다.

+0

당신의 도움은 유용하지만 지금이 점점 오전 : >> 건축 x86_64에 대한 정의되지 않은 기호를 : "_main"에서 참조 : 암시 적 항목이/주 실행 LD를위한 시작 : 기호가 건축 x86_64에 찾을 수 없습니다 clang : 오류 : 종료 코드 1로 인해 링커 명령이 실패했습니다 (호출을 보려면 -v 사용). 무엇을 의미합니까 ?? –

+0

'queue.cpp'만으로 실행 파일을 컴파일하려고 한 것처럼 보입니다. 또한 컴파일 명령에서 테스트 cpp 파일 (원본 게시물에 붙여 넣은 코드가 들어있는 파일)이 있어야합니다. 그래서'g ++ queue.cpp test.cpp'와 같은 것입니다. – hushaohan