Ich bin neu zu c.Ich habe den folgenden Code, der eine doppelt verkettete Liste erstellt.Simple-C-Programm stürzt in Windows
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct Dnode
{
char c;
struct Dnode *left;
struct Dnode *right;
}Dnode;
void insert(Dnode *,char);
void unshift(Dnode *,char);
void travel(Dnode *);
int main(){
Dnode *cur = (Dnode *)malloc(sizeof(Dnode));
Dnode *head = NULL;
head = cur;
cur -> c = 'a';
printf("Cur -> c: %c\n",cur->c);
cur ->left = NULL;
cur -> right = (Dnode *)malloc(sizeof(Dnode));
cur->right->c = 'b';
cur->right->left = cur;
cur = cur->right;
travel(head);
system("pause");
return 0;
}
void reset(Dnode *h){
while(h->left)
h=h->left;
}
void travel(Dnode *head){
printf("Traversing all nodes of list:\n");
while(head->right){
printf("Received char from node %c\n",head->c);
head = head->right;
}
//reset(head);
}
void insert(Dnode * d,char c){
Dnode *t = d;
while(t ->right)
t=t->right;
t->right = (Dnode *)malloc(sizeof(Dnode));
if(t->right){
t->right->c = c;
t= t->right;
t->right = t->left = NULL;
}
}
void unshift(Dnode *d,char cc){
Dnode *t =(Dnode *)malloc(sizeof(Dnode));
t = d->right;
t->left =NULL;
d->left = t;
d = t;
}
Das Problem ist, dass nach dem Aufruf von travel() alle Knoten ausgedruckt werden. Es druckt „Empfangene Zeichen von Knoten ein“ und „Empfangene Zeichen von Knoten b“
aber dann ist die Windows mir einen Fehler geben, die besagen, dass das Programm crashed.Any Ideen hat? Ich würde eine detaillierte Antwort mag so wie um ähnliche Probleme in der Zukunft zu vermeiden.
Verwenden Sie einen Debugger, um durch das Programm zu gehen und festzustellen, wo es fehlschlägt. – Barmar
Sie haben nie 'cur-> right-> right' initialisiert. – Barmar
Dies scheint kein "einfaches" Programm zu sein. :-P –