c:将字符串传递给函数失败

时间:2016-01-02 01:38:53

标签: c string

我不知道,为什么我的程序在将字符串传递给函数时崩溃了。我觉得它应该有效。 :/

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;

嗯,老实说,我不知道那里出了什么问题。 :(

3 个答案:

答案 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的正文,请尝试:

  1. node **head = NULL;更改为node *head = NULL;
  2. add_person(*head, nm, sn);更改为add_person(&head, nm, sn);