17.12) access violation
307
投稿した質問数 1
#pragma once
#include <stdbool.h>
#define TSIZE 45
#define MAX_SIZE 4 // array size
typedef struct element
{
char name[TSIZE];
} Item;
typedef struct queue
{
int front;
int rear;
int n_items;
Item items[MAX_SIZE];
} Queue;
void Init_queue(Queue* pq);
bool QueueIsFull(const Queue* pq);
bool QueueIsEmpty(const Queue* pq);
int QueueItemCount(const Queue* pq);
bool Enqueue(Item item, Queue* pq);
bool Dequeue(Item* pitem, Queue* pq);
void EmptyQueue(Queue* pq);
void TraverseQueue(Queue* pq);
void print_item(Item item);
#include "ArrayQueue.h"
#include <stdio.h>
#include <assert.h>
void Init_queue(Queue* pq)
{
pq->front = 0;
pq->rear = 0;
pq->n_items = 0;
}
bool QueueIsFull(const Queue* pq)
{
return (pq->rear + 1) % MAX_SIZE == pq->front;
}
bool QueueIsEmpty(const Queue* pq)
{
return pq->front == pq->rear;
}
int QueueItemCount(const Queue* pq)
{
return pq->n_items;
}
bool Enqueue(Item item, Queue* pq)
{
if (QueueIsFull(pq))
{
printf("Queue is Full.\n");
return false;
}
pq->rear = (pq->rear + 1) % MAX_SIZE;
pq->items[pq->rear] = item;
pq->n_items++;
return true;
}
bool Dequeue(Item* pitem, Queue* pq)
{
if (QueueIsEmpty(pq))
{
printf("Queue is Empty.\n");
return false;
}
pq->front = (pq->front + 1) % MAX_SIZE;
*pitem = pq->items[pq->front];
pq->n_items--;
return true;
}
void EmptyQueue(Queue* pq)
{
Init_queue(pq);
}
void TraverseQueue(Queue* pq)
{
for (int i = pq->front; i != pq->rear; i = (i + 1) % MAX_SIZE)
print_item(pq->items[(i + 1) % MAX_SIZE]);
}
void print_item(Item item)
{
printf('%s ', item.name);
}
#include <stdio.h>
#include <string.h>
#include "ArrayQueue.h"
Item get_item(const char* name);
void print_queue(Queue* pq);
int main()
{
Queue queue;
Item temp;
Init_queue(&queue);
Enqueue(get_item("Jack"), &queue);
print_queue(&queue);
Enqueue(get_item("Henry"), &queue);
print_queue(&queue);
Enqueue(get_item("Stan"), &queue);
print_queue(&queue);
Enqueue(get_item("Butters"), &queue); // capacity 4/3 fail
print_queue(&queue);
if (Dequeue(&temp, &queue))
printf("Item from queue : %s\n", temp.name);
print_queue(&queue);
if (Dequeue(&temp, &queue))
printf("Item from queue : %s\n", temp.name);
print_queue(&queue);
if (Dequeue(&temp, &queue))
printf("Item from queue : %s\n", temp.name);
print_queue(&queue);
if (Dequeue(&temp, &queue))
printf("Item from queue : %s\n", temp.name);
print_queue(&queue);
printf("====== Circulation Test ======");
Init_queue(&queue);
for (int i = 0; i < 10; ++i)
{
Enqueue(get_item("Hello"), &queue);
print_queue(&queue);
if (Dequeue(&temp, &queue))
printf("Item from queue : %s\n", temp.name);
print_queue(&queue);
}
return 0;
}
Item get_item(char* name)
{
Item new_item;
strcpy(new_item.name, name);
return new_item;
}
void print_queue(Queue* pq)
{
printf("Front : %d, Rear : %d, Size %d\n", pq->front, pq->rear, pq->n_items);
printf("Queue : ");
if (QueueIsEmpty(pq))
printf("Empty");
else
TraverseQueue(pq);
printf("\n\n");
}
순서대로 헤더, 헤더함수파일, 메인파일 입니다
디버깅시,
TraverseQueue함수 내의 print_item 함수가 실행되는 순간 access violation이 뜹니다
access violation 전까지는 값들 제대로 다 연산이 되다가
갑자기 print함수에서 저러니까 도저히 감이 안잡힙니다
방법이 없어 도움을 구합니다
回答 1
0
혹시 아래의 오류인가요?

관련 오류들을 검색해보니 해당 오류는 버퍼의 크기를 잘못 지정하거나
잘못된 주소를 참조하여 발생하는 오류인 것으로 보입니다.
https://m.blog.naver.com/dao8500/222112397866
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=onnelim7791&logNo=221550696178
TraverseQueue를
void TraverseQueue(Queue* pq) 로 customize하신 것으로 보이는데,
해당 코드의 주소에서 잘못된 주소 참조가 있는지 확인해보시거나
강의 내의 코드인
void TraverseQueue(Queue* pq, void (* func) (Item item)
형태로 맞춰보시겠어요?
안녕하세요. 계속 프로젝트를 해야지 하다가 결제하고 환경 설정 중입니다.
0
14
1
Export template 안됨
1
26
2
scanf("%d\n") 의미
0
20
1
필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)
0
37
2
26년 1회 실기 해설 강의
0
51
2
주소 연산자(&) 간접 지정자(*) 반대 개념
0
33
1
이진 탐색: 탐색 실패하는 경우 어째서 first > last인 경우가 나오나요?
0
324
1
finditembyindex 질문드립니다!
0
348
1
19:20 부분에서 질문있습니다.
0
278
1
pnode = pnode->next; 와 pnode->next = pnode;는 같은 것으로 생각해도 될까요?
0
401
2
질문. warning뜨는 이유
0
301
1
링크드 리스트 질문 드립니다.
0
216
1
함수포인터 질문드립니다
0
224
1
강의 내용 질문 드립니다!
0
369
2
노드 주소 순서 관련 질문
0
282
1
질문드립니다!
0
242
1
DeleteAllNodes 에서 질문있습니다.
0
375
5
16:30 질문입니다.
0
343
4
scanf 질문이요!!
0
253
1
12:30 의 ArrayQueue.h
0
292
2
10:10 Add front에서 질문드립니다.
1
362
1
스택 자료구조
0
246
1
변수 count의 활용에 대해 질문이 있습니다.
0
320
1
1번 실행하면 에러가 뜨는데 이유를 모르겠습니다..
0
371
2

