【发布时间】:2017-10-09 08:26:54
【问题描述】:
我正在尝试实现一个链表,但在向其中添加字符串数组时遇到了一些麻烦。它第一次添加没有问题,但如果我再次调用我的插入函数,我会收到“分段错误:11”错误。
代码如下:
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*));不见了。 -
@kuro 感谢您的回答,但没有奏效。还是一样的错误。
-
@WhozCraig 我的回答是给在你之前回答的用户 kuro。你的回答解决了它。
-
优秀。很高兴它有帮助。 eyalm 的答案中的调试器演练示例本身就值得一票,它指出了突出的问题。就个人而言,我会接受。
标签: c linked-list malloc