2016-01-02 45 views
-2

我不知道为什么我的程序在向函数传递字符串时崩溃。我非常喜欢它应该工作。 :/c:将字符串传递给函数失败

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 
} 

该计划的目的是创建一个列表,并添加三个人吧。 我已经评论了这条线,哪里不对。 调试器: “异常在ConsoleApplication2.exe在0x00D91A54抛出:0000005:访问冲突读取位置00000000

如果这个异常的处理程序,该程序可以安全地继续下去。”

那么,我真的不知道那里出了什么问题。 :(

+2

请提供[MCVE(集中在 “最小”)。和“我的程序崩溃”是没有**具体**问题的描述。使用调试器。 – Olaf

+4

'glowa'包含NULL,并且您正尝试使用'* glowa'。崩溃与字符串无关。 – immibis

+0

“调试器:”ConsoleApplication2.exe中的0x00D91A54引发的异常:0xC0000005:访问冲突读取位置0x00000000“看起来不像调试器消息如果不知道调试器是什么,请搜索该术语 – Olaf

回答

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? 
} 
+0

void add_person节点**头,字符名称[MAXDL],char surn [MAXDL])<--------------不应该改变**头到头在这里以及呢? –

+1

不需要。因为函数需要传递'node **','&head'是'node **'。 – Ziffusion

0

分配headNULL然后取消引用。这导致崩溃。你可以只通过在head而不是*head,它不会崩溃。不过,你会传递NULL,我想象不你正在尝试做的。

NULL是0x00000000地址,这就是为什么它说你想读00000000。你永远要做到这一点。

0

没有看到的add_person身体,尝试:

  1. 变化node **head = NULL;node *head = NULL;
  2. 变化add_person(*head, nm, sn);add_person(&head, nm, sn);
相关问题