私はc.Iを初めて使用しています。ダブルリンクリストを作成する次のコードがあります。ウィンドウ内で単純なcプログラムがクラッシュする
#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;
}
問題は、travel()が呼び出された後、すべてのノードが出力されることです。 それは と「ノードBから受信した文字」
「ノードから文字を受信した」印刷しますが、その後Windowsが私のプログラムはcrashed.Anyのアイデアを持っていると言うエラーを与えているように?私は、詳細な回答をしたいと思います将来同様の問題を回避することができます。あなたが最初のループでX.c
を印刷することにより開始し、第二のループで初期化されていないポインタを使用travel
機能にそう
head ------> X ------> Y ------> uninitialized
/^ /
/| /
/ \ /
null<--- -------
:あなたのリストを初期化後
デバッガを使用してプログラムをステップ実行し、プログラムが失敗している箇所を確認します。 – Barmar
'cur-> right-> right'は決して初期化していません。 – Barmar
これは「シンプルな」プログラムのようには見えません。 :-P –