我写了这个程序来建立一个队列。
#include <stdio.h>
#include <stdlib.h>
typedef struct Queue{
int *array;
int front,rear,size,capacity;
}Queue;
int isFull(Queue *q){
return q->size == q->capacity;
}
int isEmpty(Queue *q){
return q->size == 0;
}
Queue *createQueue(int capacity){
Queue *q = (Queue *)malloc(sizeof(Queue));
q->size = 0;
q->front = 0;
q->capacity = capacity;
q->rear = capacity - 1;
q->array = (int *)malloc(sizeof(int)*capacity);
}
void enqueue(Queue *q,int num){
if(isFull(q))
return;
q->rear = (q->rear + 1) % q->capacity;
q->array[q->rear] = num;
q->size++;
}
int dequeue(Queue *q){
int item;
if(isEmpty(q))
return -1;
item = q->array[q->front];
q->front = (q->front + 1) % q->capacity;
q->size--;
return item;
}
int main(void) {
Queue *q = createQueue(10);
enqueue(q,1);
enqueue(q,2);
enqueue(q,3);
enqueue(q,4);
printf("%d ",dequeue(q));
printf("%d ",dequeue(q));
printf("%d ",dequeue(q));
printf("%d ",dequeue(q));
return 0;
}
从Linux终端运行时,程序运行正常。当我在ideone.com中运行相同的程序时,我收到运行时错误。
我确实尝试手动查找程序中的内存泄漏。似乎没有问题
为什么会这样?
答案 0 :(得分:1)
你的函数createQueue
应该返回一个指向Queue
的指针,但是里面没有明确的return
:你的函数返回的内容在编译器/平台上并不能保证。< / p>
gcc会在启用警告(-Wall
)的情况下捕获此类错误。
答案 1 :(得分:0)
Queue *createQueue(int capacity){
Queue *q = (Queue *)malloc(sizeof(Queue));
q->size = 0;
q->front = 0;
q->capacity = capacity;
q->rear = capacity - 1;
q->array = (int *)malloc(sizeof(int)*capacity);
return q;
}