2014-12-27 59 views
0

我的程序崩溃了,我不知道为什么。我试图创建一个10个元素的队列。我的主要代码:我的程序崩溃

#include "queue.h" 

int main(void){ 

Queue * queue; 

queue = create_q(10); 
return 0; 
} 

我queue.h代码:

#ifndef QUEUE_H_ 
#define QUEUE_H_ 
#endif /* QUEUE_H_ */ 

#include <stdbool.h> /* for bool type */ 
#include <stdio.h> /* for standard IO support */ 
#include <stdlib.h> /* for malloc() and free() functions */ 

typedef struct patient { /* my structure */ 
    char name [20]; 
    char surname [20]; 
    int priority; 
    struct patient * next; /* pointer to next node */ 
}Node; 

typedef struct queue { 
    Node * head; 
    Node * last; 
}Queue; 

Queue * create_q(int size); 

我queue.c代码:

#include "queue.h" 

Queue * create_q(int size){ 

Node * temp, * temp2; 
Queue * new ; 
int i=0,j; 

temp = (Node *) malloc(sizeof(Node)); 
new->head = temp; 
if(temp == NULL){ 
    printf("There is not enough memory to create the %dth Node of your queue",i); 
    for (j=1; j<=i; j++){ 
     new->head = temp->next; 
     free(temp); 
    } 
    return NULL; 
} 
if (temp != NULL){ 
    new->head = temp; 
    for (i=1; i<size; i++){ 
     temp2 = (Node *) malloc(sizeof(Node)); 
     temp->next = temp2; 
    } 
    return new; 
} 
return 0; 
} 

使用Eclipse调试器,它似乎在轰然新 - > head = temp。希望有人能找到我的错误,因为我不能。

+1

您从未为'new'分配过空间。 – Barmar

+0

你使用gcc或g ++来编译这个吗? – hyades

+0

@hyades必须是gcc。 g ++可能会在名为'new'的变量上出现,因为这是一个C++关键字。 – duskwuff

回答

5

您从未分配过新的队列。您需要:

Queue *new = malloc(sizeof(Queue)); 
+0

感谢您的帮助! – user3540561

+0

@ user3540561你知道如何接受答案吗?请接受这一个。这是正确的。 –