#include<stdio.h>
#include <stdlib.h>
#define Max 4
typedef struct q {
int front, rear; //front rear 변수
int data[Max]; // data 배열
}MyQueue;
void init(MyQueue* s, int num) { //큐 초기화
s = (MyQueue*)malloc(num * sizeof(MyQueue)); /*num 만큼 큐 동적할당*/
s->front = -1;
s->rear = -1;
}
int is_full(MyQueue* s) /*큐가 가득 차면*/
{
if (s->rear == Max - 1)
return 1;
else
return 0;
}
int is_empty(MyQueue* s) /*큐가 비웠있으면*/
{
if (s->front == s->rear)
return 1;
else
return 0;
}
void enqueue(MyQueue* s, int item) /*숫자를 입력받으면서 rear도 증가 */
{
if (is_full(s)) {
printf("equeue 에러\n");
}
else {
s->data[++(s->rear)] = item; /*item을 데이터 배열에 저장, 인덱스 rear 값 1증가*/
}
}
int dequeue(MyQueue* s) /*숫자를 출력하면서 해당 인덱스의 수를 삭제 front 수 증가*/
{
if (is_empty(s))
{
printf("dequeue 에러\n");
}
int item;
item = s->data[++(s->front)]; /*int 형이기 때문에 int 형 값으로 리턴 */
return item;
}
int main() {
MyQueue* s = (MyQueue*)malloc(sizeof(MyQueue));
init(s, 3);
enqueue(s, 100);
enqueue(s, 200);
enqueue(s, 300);
enqueue(s, 400);
while (!is_empty(s))
{
printf("%d\n", dequeue(s));
}
dequeue(s);
free(s);
return 0;
}
예외가 throw됨: 쓰기 액세스 위반입니다.
s이(가) 0x3935C5B2였습니다. 되었다고 뜨지만 컴파일 에러는 나타자지 않는다.
코드를 리눅스 버전에서 짜고 비주얼 스튜디오에서 실행해보니 출력화면이 제대로 나오지 않는 경우가 발생함 ㅠㅠ
(하지만 이것도 디버그를 해서 문제를 제대로 해결해야 된다.)