2013-09-29 7 views
0

사용자 지정 벡터를 기반으로 일반 큐 클래스를 만들려고합니다. 내 코드는 내 입력이 주어진 모든 것을 출력하고 충돌을 일으키지 않는다는 점에서 괜찮습니다. 내 queue.pop()를 호출하면 프로그램이 실행이 완료 그러나, 나는 다음을 얻을 :사용자 지정 큐의 C++ 오류 : 해제 할 포인터가 할당되지 않았습니다.

a.out(6878) malloc: *** error for object 0x7fb210403981: pointer being freed was not allocated 

내 벡터 타입 T의 배열을 중심으로 구축되어, T * typeArray;을 선언했다. 모두 queue.pop()은 내 벡터에서 함수를 호출합니다 (vector.pop_front()). 문제의 원인이되는 줄은

// Assign the pointer to the second position in the array. 
typeArray = &typeArray[1]; 

내가 뭘 잘못하고 있니? 왜이 기능이 작동하지 않습니까? 감사!

+4

코드가 충분하지 않습니다. 일반적인 대기열 클래스를 표시하십시오. 'std :: deque'의 문제점은 무엇입니까? 모든 경고와 디버깅 정보 ('g ++ -Wall -g')로 컴파일하고'gdb' 디버거와 [valgrind] (http://valgrind.org/)를 사용하는 법을 배웁니다 –

+0

설명이 없으면 대답 할 수 없습니다 암호. 그러나 제쳐두고, 나는'std :: vector' 대신'std :: deque'를 사용할 것을 제안합니다. 벡터 앞에서 요소를 제거하는 것은 비효율적입니다. 'std :: queue'를 보면, 디폴트로'std :: deque'를 사용합니다. – juanchopanza

+1

코드가 작동하지 않고 ** 하나의 ** 코드 줄에서 진단이 필요하십니까? 나는 그 문제가 정확하게 오류 메시지가 말하는 것과 같을 것이다. 해제하고있는 포인터는 pop_front에서 해당 포인터를 증가시키기 때문에 할당 한 포인터와 다릅니다. 나는 또한 당신이 알고있는 것보다 코드에 더 많은 문제가 있다고 의심한다. (어쩌면 당신이 그것을 게시하기를 꺼리는 이유 일 것이다). 그러나 단지 추측 일 뿐이라는 더 많은 코드가없는 상황에서도 마찬가지입니다. – john

답변

0

deletenew으로 반환 된 포인터 (mallocfree에 대해서도 동일한 원칙이 적용됩니다) 만 허용됩니다. 당신이

typeArray = &typeArray[1]; 

원래 포인터를 교체하면

는 당신은 할당 된 저장 및 큐의 머리에 대해 별도의 포인터를 유지하기 위해 필요

delete [] typeArray; 

에 오류가 있습니다.

+0

감사합니다! 도움에 정말 감사드립니다. – Seminole0ne

관련 문제