リンクリストの実装にエラーがあるかどうか、誰でも確認できますか? リンクされたリストを繰り返し処理しようとすると、セグ フォールトが発生し続けます。
"process_command" の "root" からリンク リストを繰り返し処理しようとしていますが、root->child にアクセスしようとすると、seg fault エラーが発生します。
ノードの実装
typedef struct _node {
struct _node *child;
char *command;
} Command_list;
文字列をトークン化し、それらをリンクリストに入れるために使用している2つの関数。
Command_list *process_command( char command_line[256] )
{
printf("Command: %s", command_line);
//allocate space for root & child
Command_list *root = (Command_list*)malloc(sizeof (Command_list));
Command_list *child = (Command_list*)malloc(sizeof (Command_list));
char *token;
char *saveptr;
//get the first part of the string
token = strtok_r( command_line, " ", &saveptr);
//if the first word in the string is student
if( !strcmp(token, "student") )
{
//set the first word to the be root
root = insert_command( token, root );
printf("Current root command: %s \n", root->command);
child = root;
//get the next word from the string
token = strtok_r( NULL, " ", &saveptr);
//keep getting words from the list and store them in a linked-list
while( token != NULL )
{
child = insert_command( token, child );
token = strtok_r( NULL, " ", &saveptr);
}
}
return root;
}
Command_list *insert_command( char *value, Command_list *root)
{
printf("previous value: %s \n", root->command);
Command_list *child_node = (Command_list*)malloc(sizeof (Command_list));
//if the node being passed in is empty, store the value in itself
if( root->command == NULL ){
root->command = value;
root->child = 0;
printf("Inserting value to root: %s \n", root->command);
return root;
}
//otherwise store the value in a child node
else
{
child_node->command = value;
child_node->child = 0;
printf("Inserting value to child node: %s \n", child_node->command);
return child_node;
}
}
編集: 反復コード
{
....
Command_list *temp = (Command_list*)malloc(sizeof (Command_list));
temp = root;
while(temp != NULL){
printf("Command: %s\n", temp->command);
temp = temp->child;
....
}
私が使用している反復コードを追加しました。コードはコードブロックで正常に動作しているように見えますが、ターミナルでの最初の出力後に反復が停止します。