Нарушение прав доступа при чтении - C (СИ)
Формулировка задачи:
Список.
Не могу разобраться с двумя функциями, компилятор не находит синтаксических ошибок, а во время тестирования программки, вылазиет ошибка, названная в заголовке темы.#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Item
{
char data;
struct Item *next;
}Item;
Item* reorg(Item*);//функция изменения строки
Item* enter_Item(char*);//функция ввода данных в список
char* ent_str();//функция ввода строки
void print_sp(Item*);
int main()
{
Item *spisok;//объявление списка
char* stroka=ent_str();
spisok=enter_Item(stroka);//переделать строку в список
print_sp(spisok);//вывести список на экран
getch();
return 0;
}
Item* enter_Item(char *stroka)
{
Item *head, *last;
int i=0;
Item curr={stroka[i], NULL};
last=&curr;
head=last;
do
{
i++;
last->next=(Item*)malloc(sizeof(Item));
last=last->next;
last->next=NULL;
last->data=stroka[i];
}while (stroka[i]!=NULL);
return head;
}
void print_sp(Item *spisok)
{
while(spisok!=NULL)
{
printf("%c", spisok->data);
spisok=spisok->next;
};
}Решение задачи: «Нарушение прав доступа при чтении»
textual
Листинг программы
Item curr={stroka[i], NULL};
last=&curr;
Объяснение кода листинга программы
В данном коде выполняется следующие действия:
- Создается новый элемент списка -
curr. - Значение нового элемента списка -
curr, инициализируется какstroka[i], что предполагает, чтоstrokaявляется массивом строк. - Указатель
lastинициализируется как адрес нового элемента списка -curr. Таким образом, код создает новый элемент списка и указывает на него указательlast, что предполагает, чтоlastявляется концом списка. Предполагается, что данная программа будет работать с динамическим списком, где каждый элемент - это структура данных, содержащая строку и указатель на следующий элемент списка. Важно отметить, что код не содержит никаких проверок на ошибки или обработку исключений, поэтому предполагается, что он будет выполняться в контролируемой среде без возможности сбоев или ошибок.