포인터가 포함 된 구조체가 있습니다. next
. 구조체의 대기열을 만들려고하지만 enqueue/dequeue
을 호출하면 결국 정보를 쓰려고하는 중 오류가 발생합니다. enque/dequeue/insert
으로 인한 것인지 여부를 알 수 없습니다. 단지 C를 배우고 free/malloc
또는 그것이 필요한지 확실하지 않습니다. 삽입은 int 값을 기준으로합니다 (가장 작은 값부터).큐에 큐 삽입/큐 풀 제거/삽입 구조체
struct queue {
struct RCB* front;
struct RCB* back;
};
/*Initialize queue */
struct queue* new_queue(void){
struct queue* tmp = malloc(1 * sizeof(tmp));
tmp->front = NULL;
tmp->back = NULL;
return tmp;
}
/*Add RCB to Queue FIFO */
struct queue* enqueue(struct queue* queue, struct RCB* rcb){
if(queue->front == NULL && queue->back == NULL){
queue->front = rcb;
queue->back = rcb;
printf("added front to queue\n");
return queue;
}
else {
queue->back->next = rcb;
queue->back = rcb;
printf("added to queue\n");
}
return queue;
}
/*Remove RCB from Queue FIFO */
struct RCB* dequeue(struct queue* queue){
struct RCB *tmp1 = (struct RCB *)malloc(sizeof(struct RCB));
struct RCB *tmp2 = (struct RCB *)malloc(sizeof(struct RCB));
if(queue->front == NULL && queue->back == NULL){
printf("queue is empty\n");
}
tmp1 = queue->front;
tmp2 = tmp1->next;
queue->front = tmp2;
if(queue->front == NULL){
queue->back = queue->front;
printf("removed rcb from queue\n");
}
return tmp1;
}
/*Insert RCB into Queue */
struct queue* insert(struct queue* queue, struct RCB* rcb){
if(queue->front == NULL && queue->back == NULL){
queue->front = rcb;
queue->back = rcb;
return queue;
}
if(queue->front->next == NULL){
queue->front->next = rcb;
return queue;
}
struct RCB *tmp = (struct RCB *)malloc(sizeof(struct RCB));
tmp = queue->front;
while(tmp->next->b2r < rcb->b2r || tmp->next == NULL){
tmp = tmp->next;
}
rcb->next = tmp->next;
tmp->next = rcb;
return queue;
}
어떤 도움을 주시면 감사하겠습니다. 이 대신 struct queue
의 크기, struct queue
포인터의 크기의 버퍼를 할당하기 때문에 new_queue
에서
'의를 sizeof (TMP)'그것이 가리키는 어떤 * 포인터 *의 크기의이 아니라, 잘못된 것입니다. 대신에'sizeof (* tmp)'를 사용해야합니다. –
감사합니다! 여전히 포인터에 대해 알고 있습니다 –
'dequeue '에있는 두 개의'malloc'이 유출되었습니다. – fluter