Компилятор ругается на выделение памяти malloc - C (СИ)
Формулировка задачи:
#include <stdio.h> #include <conio.h> #include <string.h> #include <locale.h> /* СТУДЕНТ: фамилия, имя, отчество (строки по 15 символов); номер зачетной книжки (целое шестизначное число, уникальное поле); дата рождения (в формате дд.мм.гггг). */ // объявляем структу СООБЩЕНИЕ struct STUDENT { int ID_STD; //уникальное поле char FIO[15]; char DATE[10]; } ; int main(int argc, char *argv[]){ setlocale(LC_ALL,"RU"); int ARR_SIZE = 0; // размер массива, int i = 0; //управляющая перенная цикла char SearchString[10]; //переменная для поиска struct STUDENT *d; // указатель на массив структцры printf("Введите размер: "); scanf("%i", &ARR_SIZE); // сохраняем в переменной введенный размер d = (struct STUDENT*)malloc(ARR_SIZE*sizeof(STUDENT)); // выделяем память для массива if(d == NULL) return -1; // если памяти нет, то выход с ошибкой printf("Введите данные о студенте:\a\n"); for(i = 0; i < ARR_SIZE; i++){ // цикл заполнения структуры printf("%i:\n",i+1); printf("Номер зачётной книги: "); scanf("%d*c", &d[i].ID_STD); printf("ФИО: "); gets("%s*c", d[i].FIO); printf("Дата: "); gets("%s*c", d[i].DATE); } printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\a"); printf("- - - - - - - - - - - - -Поиск- - - - - - - - - - - - - - \n\a"); printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\a"); printf("Введите номер зачётки студента для поиска:\a "); gets("%s", &SearchString); for(i = 0; i < ARR_SIZE; i++){ printf("%d\n",__LINE__); if (strstr(d[i].DATE,SearchString) != NULL){ printf("- - - - - - - - - - - - - - - - - - - - - - - - - "); printf("- - - -Результат поиска- - - - - - - \a\n"); printf("- - - - - - - - - - - - - - - - - - - - - - - - - "); printf("Номер зачётной книги: %8.d\n",d[i].ID_STD); printf("ФИО: %s\n",d[i].FIO); printf("Дата: %s\n",d[i].DATE); } } free(d); // освобождаем память, которая была выделена под массив getch(); return 0; }
Решение задачи: «Компилятор ругается на выделение памяти malloc»
textual
Листинг программы
typedef struct { int ID_STD; //уникальное поле char FIO[15]; char DATE[10]; } STUDENT;
Объяснение кода листинга программы
- Типизация данных: структура STUDENT определена с помощью ключевого слова typedef, что позволяет использовать данную структуру как тип данных.
- Поле ID_STD типа int отвечает за уникальный идентификатор студента.
- Поле FIO типа char[15] отвечает за фамилию, имя и отчество студента, которые хранятся в массиве символов.
- Поле DATE типа char[10] отвечает за дату рождения студента, которая хранится в массиве символов.
Пример использования:
STUDENT student;
student = (STUDENT) malloc(sizeof(STUDENT));
if (student == NULL) {
printf(
Ошибка при выделении памяти\n
); exit(1); } student->ID_STD = 12345; strcpy(student->FIO,Иванов Иван Иванович
); strcpy(student->DATE,01.01.1991
); free(student); // освобождение памяти Пояснение: - Выделяется память под указатель на структуру STUDENT с помощью malloc.
- Проверяется успешность выделения памяти, если память не может быть выделена, то выводится сообщение об ошибке и программа завершается.
- Задается значение полю ID_STD структуры student.
- С помощью функции strcpy копируются строки в поля FIO и DATE структуры student.
- Выделяемая память освобождается с помощью функции free.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д