Dies ist das C-Programm für die Warteschlange. Ich habe es gerade für Einfügewerte geschrieben. Das Problem, das ich bekomme, ist, dass ich Segmentierungsfehler bekomme, wenn ich das erste Element einfüge.Warum dieses Programm einen Segmentierungsfehler in diesem Warteschlangenprogramm gibt
#include <stdio.h>
#include <malloc.h>
struct node{
int data;
struct node *next;
};
struct queue {
struct node *front;
struct node *rear;
};
struct queue *q;
void create_queue(struct queue *);
struct queue *insert(struct queue *,int);
int main()
{
int val, option;
create_queue(q);
do
{
printf("\n *****MAIN MENU*****");
printf("\n 1. INSERT");
printf("\n Enter your option : ");
scanf("%d", &option);
switch(option)
{
case 1:
printf("\n Enter the number to insert in the queue:");
scanf("%d", &val);
q = insert(q,val);
break;
}
}while(option != 5);
return 0;
}
void create_queue(struct queue *q)
{
q = (struct queue *)malloc(sizeof(struct queue));
q->rear = NULL;//how this happened without any error??
q->front = NULL;
}
struct queue *insert(struct queue *q,int val)
{
struct node *ptr;
ptr = (struct node*)malloc(sizeof(struct node));
if(ptr == NULL)
{
printf("error in allocating\n");
return -1;
}
ptr->data = val;
if(q->front == NULL)
{
q->front = ptr;//here I get segmentation fault
q->rear = ptr;
q->front->next = q->rear->next = NULL;
}
else
{
q->rear->next = ptr;
q->rear = ptr;
q->rear->next = NULL;
}
return q;
}
Was ist falsch an meinem Programm? Warum funktioniert die Zuweisung eines neuen Knotens nicht, wie lautet die aktuelle Syntax?
'create_queue()' macht alle lokalen Änderungen ..... –
q ist ein Zeiger hier. Änderungen an den Elementen werden somit gespeichert. Ist es nicht? – acidlategamer
Der Speicher, der in 'create_queue' zugewiesen wurde, wird nirgends zurückgegeben, sodass Sie undefiniertes Verhalten verursachen, indem Sie q verwenden, wenn es nicht zugewiesen wurde. Wenn Sie Zeile für Zeile mit einem Debugger fortfahren, wird dies auf einfache Weise angezeigt. Gib entweder den Zeiger zurück oder benutze '**' –