Понятия не имею, почему моя программа вылетает при передаче строки в функцию. Я совершенно уверен, что он должен работать. : /

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
}

Цель программы - создать список и добавить в него трех человек. Я прокомментировал строку, где sth неверно. Отладчик: "Исключение в 0x00D91A54 в ConsoleApplication2.exe: 0xC0000005: место чтения нарушения прав доступа 0x00000000.

Если есть обработчик для этого исключения, программа может быть безопасно продолжена. "

Ну, честно говоря, я понятия не имею, что там не так. : (

wis.niowy

Ответов: 3

Ответы (3)

Попробуйте внести следующие изменения.

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

Не видя тела add_person, попробуйте:

  1. Изменить node ** head = NULL; на node * head = NULL;
  2. Изменить add_person (* head, nm, sn); на add_person (& head, nm, sn);

Вы назначаете head как NULL, затем разыменовываете. Это вызывает сбой. Вы можете просто передать head вместо * head, и это не приведет к сбою. Однако вы могли бы передать NULL, что, как я полагаю, не то, что вы пытаетесь сделать.

NULL - это адрес 0x00000000, поэтому он говорит, что вы пытаетесь прочитать 0x00000000. Вы никогда не захотите этого делать.

2022 WebDevInsider