队列的实现给出了运行时错误

时间:2014-06-30 09:04:05

标签: linux data-structures queue runtime-error

我写了这个程序来建立一个队列。

#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中运行相同的程序时,我收到运行时错误。

我确实尝试手动查找程序中的内存泄漏。似乎没有问题

为什么会这样?

2 个答案:

答案 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;
}