Программа из 20 строк, синтаксических ошибок нет, но из консоли вылетает. В чем ошибка? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include<stdio.h>
#include<malloc.h>
typedef struct sp{
struct el *info;
struct sp *link;
}sp;
typedef struct el{
int str;
struct sp *next;
}el;
int main(){
int a;
sp *head;
head=NULL;
printf("Vvod\n");
scanf("%d",&a);
head=(sp*)malloc(sizeof(sp));
head->info->str=a;
printf("Otvet\n%d", head->info->str);
return 0;
}

Решение задачи: «Программа из 20 строк, синтаксических ошибок нет, но из консоли вылетает. В чем ошибка?»

textual
Листинг программы
#include<stdio.h>
#include<malloc.h>
typedef struct sp{
struct el *info;
struct sp *link;
}sp;
typedef struct el{
int str;
struct sp *next;
}el;
int main(){
int a;
sp *head;
head=NULL;
printf("Vvod\n");
scanf("%d",&a);
head=(sp*)malloc(sizeof(sp));
head->info=(el*)malloc(sizeof(el));
head->info->str=a;
printf("Otvet\n%d", head->info->str);
return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: iostream.h и malloc.h.
  2. Объявляем структуру данных типа связный список с именем sp.
  3. Внутри структуры sp объявляем указатель info на структуру el и указатель link на следующий элемент списка sp.
  4. Объявляем структуру данных типа элемент с именем el.
  5. Внутри структуры el объявляем переменную str типа int и указатель next на следующий элемент списка el.
  6. В функции main() объявляем переменную a типа int, указатель head на первый элемент списка sp и инициализируем его значением NULL.
  7. Выводим сообщение Vvod.
  8. Считываем значение переменной a с помощью функции scanf().
  9. Выделяем память под новый элемент списка sp с помощью функции malloc().
  10. Получаем указатель на новый элемент списка sp и присваиваем его значение указателю head.
  11. Выделяем память под новый элемент списка el с помощью функции malloc().
  12. Получаем указатель на новый элемент списка el и присваиваем его значение полю info текущего элемента списка sp.
  13. Выводим сообщение Otvet.
  14. Выводим значение поля str текущего элемента списка el с помощью функции printf().
  15. Возвращаем значение 0, что означает успешный конец работы программы.
  16. В коде нет обработки ошибок, в частности, не проверяется успешность выделения памяти с помощью функций malloc() и scanf().
  17. Код не содержит цикла для прохода по всем элементам списка sp и вывода их значений.
  18. Код не содержит инструкции для освобождения выделенной памяти.
  19. Присутствует потенциальная ошибка сегментации, связанная с некорректным использованием указателя link внутри цикла.
  20. Присутствует потенциальная ошибка сегментации при попытке доступа к полю next элемента списка el, если список пуст.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы