リンクリストを実装しようとしていますが、文字列の配列を追加するときに問題があります。初めて問題を追加しますが、私の挿入機能を再度呼び出すと、 "Segmentation fault:11"というエラーが発生します。ここでLinkedListに文字列のリストを追加
はコードです:
typedef struct node_s{
int id;
char *cmd;
char **args;
int numArgs;
int connected;
struct node_s *next;
}node;
typedef node *NODES;
void insert(NODES *nodes, int idNode, char *cmdNode,char **argsNode, int nArgs,int conn){
int i;
if (!exist(*nodes,idNode))
{
if(*nodes==NULL){
*nodes = (NODES) malloc(sizeof(struct node_s));
if(*nodes==NULL)
{
perror("malloc err");
return;
}
(*nodes)->id = idNode;
(*nodes)->cmd = strdup(cmdNode);
// Problem
for(i=0;i<nArgs;i++)
(*nodes)->args[i]=strdup(argsNode[i]);
(*nodes)->numArgs=nArgs;
(*nodes)->connected=conn;
(*nodes)->next = NULL;
}
else
insert(&(*nodes)->next,idNode,cmdNode,argsNode,nArgs,conn);
}
}
int main()
{
char *cmds[4]={"wc", "-l", "another","hello.com"};
NODES nodes;
inicNodes(&nodes);
insert(&nodes,1,"wc",cmds,4,0);
// if i try to list my values here it shows them as expected.
insert(&nodes,3,"ls",cmds,4,1);
return 0;
}
ありがとうございました。
'(* nodes) - > args [i] = strdup(argsNode [i]); ' - 未定義の動作を呼び出します。あなたは 'args'のためのポインタベッドを割り当てるのを忘れました。 '(* nodes) - > args = malloc(nArgs * sizeof(char *));'がありません。 – WhozCraig
@kuroは答えに感謝しますが、うまくいきませんでした。それでも同じエラー。 – ohiohai
@WhozCraig私の答えは、あなたの前で答えたユーザーの黒でした。あなたの答えはそれを修正しました。 – ohiohai