我不知道,为什么我的程序在将字符串传递给函数时崩溃了。我觉得它应该有效。 :/
void add_person(node **head, char name[MAXDL], char surn[MAXDL]);
int main()
{
int i;
char nm[MAXDL], sn[MAXDL];
node **head = NULL;
for (i = 0; i < 3; i++)
{
scanf("%s", nm);
scanf("%s", sn);
add_person(*head, nm, sn); //IN THAT LINE THE PROBLEM OCCURS
}
//...
system("PAUSE");
return 0;
}
void add_person(node **head, char name[MAXDL], char surn[MAXDL])
{
//body
}
该计划的目的是创建一个列表并向其中添加三个人。 我已经对这条线路进行了评论,其中有些不对劲。 调试器: &#34;在ConsoleApplication2.exe中的0x00D91A54处抛出异常:0xC0000005:访问冲突读取位置0x00000000。
如果存在此异常的处理程序,则可以安全地继续该程序。&#34;
嗯,老实说,我不知道那里出了什么问题。 :(
答案 0 :(得分:2)
尝试以下更改。
void add_person(node **head, char name[MAXDL], char surn[MAXDL]);
int main()
{
int i;
char nm[MAXDL], sn[MAXDL];
node *head = NULL; // <-------------- **head -> *head
for (i = 0; i < 3; i++)
{
scanf("%s", nm);
scanf("%s", sn);
add_person(&head, nm, sn); <----------- *head -> &head
}
//...
system("PAUSE");
return 0;
}
void add_person(node **head, char name[MAXDL], char surn[MAXDL])
{
// assuming that you will allocate node in this function like so
*head = malloc(sizeof(node)); <------------- allocation here?
}
答案 1 :(得分:0)
您将head
指定为NULL
,然后取消引用。这会导致崩溃。你可以传递head
而不是*head
,它不会崩溃。但是,你会传递NULL
,我想这不是你想要做的。
NULL
是地址0x00000000,这就是为什么它说你试图读取0x00000000。你永远不想这样做。
答案 2 :(得分:0)
如果没有看到add_person
的正文,请尝试:
node **head = NULL;
更改为node *head = NULL;
add_person(*head, nm, sn);
更改为add_person(&head, nm, sn);