Компилятор ругается на выделение памяти 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;

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

  1. Типизация данных: структура STUDENT определена с помощью ключевого слова typedef, что позволяет использовать данную структуру как тип данных.
  2. Поле ID_STD типа int отвечает за уникальный идентификатор студента.
  3. Поле FIO типа char[15] отвечает за фамилию, имя и отчество студента, которые хранятся в массиве символов.
  4. Поле 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); // освобождение памяти Пояснение:
  5. Выделяется память под указатель на структуру STUDENT с помощью malloc.
  6. Проверяется успешность выделения памяти, если память не может быть выделена, то выводится сообщение об ошибке и программа завершается.
  7. Задается значение полю ID_STD структуры student.
  8. С помощью функции strcpy копируются строки в поля FIO и DATE структуры student.
  9. Выделяемая память освобождается с помощью функции free.

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


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

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

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