kksshh0612   3년 전

c로 짠 코드인데 힙 충돌이 탐지되었다고 오류메세지가 뜨는데, 뭐가 틀린건지 모르겠습니다

arkingco   3년 전


힙 에러 발생지는 59번줄 ,88번 줄의 free함수 때문이고 두 부분의 이유는 동일합니다.

void enqueue(Queue* queue, int data) {
    Node* newnode = (Node*)malloc(sizeof(Node*));

새로운 Node를 선언 할 때 sizeof(Node*) 의 경우 struct Node의 크기가 아니라 struct Node 주소(포인터)의 크기를 담는 포인터 변수 이기 때문에

정상적인 struct Node의 크기가 담기지 않습니다.

따라서 올바른 방법은 Node* newnode = (Node*)malloc(sizeof(Node)); 입니다.

실제로 크기를 확인하면 sizeof(Node*) = 4(byte) <---> sizeof(Node) = 8(byte) 가 나오게 됩니다. (TMI : 모든 변수들의 포인터 변수 크기(byte)는 같습니다. ex : *int,*double,*char ... )

댓글을 작성하려면 로그인해야 합니다.