【发布时间】:2015-01-03 00:57:25
【问题描述】:
好的,所以我有这个可行的队列实现,但是我有一些内存泄漏,不允许 if else 操作在此之后运行。
文件 queue_arr.h
#define MaxQ 100
typedef struct {
int array[MaxQ];
int front;
int back;
int size;
}*Queue;
Queue init();
int enqueue(Queue q, int v);
int dequeue(Queue q, int *v);
int front(Queue q, int *v);
int isEmpty(Queue q);
文件 queue_arr.c
#include "queue_arr.h"
#include <stdlib.h>
#include <stdio.h>
Queue init() {
Queue q = (Queue)malloc(sizeof(Queue));
q->front = 0;
q->back = 0;
q->size = 0;
return q;
}
int enqueue(Queue q, int v) {
if(q->size==MaxQ)
return 0;
q->array[q->back] = v;
q->back++;
if(q->back == MaxQ)
q->back = 0;
q->size++;
return 1;
}
int dequeue(Queue q, int *v) {
if(q->size == 0)
return 0;
*v = q->array[q->front];
q->front++;
if(q->front == MaxQ)
q->front =0;
q->size--;
return 1;
}
int front(Queue q, int *v) {
if(q->size==0)
return 0;
*v = q->array[q->front];
return 1;
}
int isEmpty(Queue q) {
if(q->size == 0)
return 1;
return 0;
}
int main(){
Queue teste = init();
int *aux;
*aux = -1;
printf("Value : %d\n",*aux );
enqueue(teste,5);
enqueue(teste,10);
enqueue(teste,15);
front(teste,aux);
printf("Next costumer: %d\n",*aux );
dequeue(teste,aux);
printf("Costumer %d left queue\n",*aux );
dequeue(teste,aux);
printf("Costumer %d left queue\n",*aux );
dequeue(teste,aux);
printf("Costume %d left queue\n",*aux );
int random = 10;
if(random == 10)
printf("asdasdasd\n");
}
最后一个 if 和 else 语句不起作用,我注意到因为我试图做一个 isEmpty if 子句,并一直导致我出现分段错误。
没有最后三行,代码编译并运行,没有错误。但这样一来,我就会不断遇到分段错误。
有人知道这个问题吗?
【问题讨论】:
-
由于这是有效的 c++ 我不能随意删除 c++ 标签,请选择 c 或 c++ 一个
-
谢谢你,即使你根本没有帮助。
-
Queue q = (Queue)malloc(sizeof(Queue));-->Queue q = (Queue)malloc(sizeof(*q));
标签: c algorithm memory segmentation-fault