/
MaestroN
/
Eltex_Homework
Обзор
Документация
Войти
/
MaestroN
/
Eltex_Homework
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Task_6/task6.3.c
74 строки
3 KB
nikita_shub
Добавление 6 задания
06 янв 2025, 17:25
06 янв 2025, 17:25
486d041
Код
Авторство
О чём код?
/* 3: Реализация функции увеличения массива Реализуйте программу, которая динамически увеличивает размер массива строк с использованием realloc. Изначально выделите память для нескольких строк, затем увеличьте размер массива и добавьте новые строки. Выведите все строки и освободите память.*/ #include <stdio.h> #include <stdlib.h> #include <string.h> int task() { // Изначально выделяем память для 3 строк int initial_size = 3; char **ptr = malloc(initial_size * sizeof(char*)); // Проверка на успешное выделение памяти if (ptr == NULL) { printf("Ошибка выделения памяти\n"); return 1; } // Заполнение первоначальных строк for (int i = 0; i < initial_size; i++) { ptr[i] = malloc(30 * sizeof(char)); // Увеличиваем память для каждой строки if (ptr[i] == NULL) { // Проверка на успешное выделение памяти для строки printf("Ошибка выделения памяти для строки %d\n", i); return 1; } snprintf(ptr[i], 30, "Строка %d", i + 1); // Заполнение строки } // Увеличиваем размер массива до 6 строк int new_size = 6; char **temp = realloc(ptr, new_size * sizeof(char*)); // Проверка на успешное перевыделение памяти if (temp == NULL) { printf("Ошибка перевыделения памяти\n"); // Освобождаем ранее выделенную память for (int i = 0; i < initial_size; i++) { free(ptr[i]); } free(ptr); return 1; } ptr = temp; // Обновляем указатель на новый массив // Заполнение новых строк for (int i = initial_size; i < new_size; i++) { ptr[i] = malloc(30 * sizeof(char)); // Увеличиваем память для каждой новой строки if (ptr[i] == NULL) { // Проверка на успешное выделение памяти для новой строки printf("Ошибка выделения памяти для новой строки %d\n", i); return 1; } snprintf(ptr[i], 30, "Новая строка %d", i + 1); // Заполнение новой строки } // Вывод всех строк for (int i = 0; i < new_size; i++) { printf("%s\n", ptr[i]); } // Освобождение выделенной памяти for (int i = 0; i < new_size; i++) { free(ptr[i]); // Освобождаем память для каждой строки } free(ptr); // Освобождаем память для массива указателей return 0; } int main() { return task(); // Вызов функции и возврат результата }