Работа с malloc - найти ошибку в коде - C (СИ)
Формулировка задачи:
Всем привет.
Написал программу, которая выделяет память под двумерный массив и сохраняет в него имена. Размер выделяемой памяти зависит от количества и длины слов, которое определяется пользователем. Программка рассчитана на сохранение n-го количества слов, которое также определяется пользователем в начале программы (при запуске).
Вот, собственно, и сам код программы:
Все подробно прокомментировал. Программка выполняется только если вводить два имению Если больше - зависает. Видимо у меня где-то ошибка в понимании указателей или функции malloc(). Прошу помочь найти ошибку в коде.
Спасибо.
#include <stdio.h> #include <string.h> // функция выделения памяти для одного слова. На входе m - количество букв, определенное с помощью strlen(). *mass - указатель на указатель void memory_for_string(char *mass, int m) { *mass = (char *)malloc((m+1)*sizeof(char)); // прибавляем к переменной 'm' 1 для выделения места под знак конца строки } int main(void) { int m=0, n=0, i=0; char **mass, str[20]; // **mass - указатель на указатель. str - временный массив для определения длины введенного слова puts("Please, enter a number of strings"); // пожалуйста, введите число строк scanf("%d", &n); fflush(stdin); // очищаем стандартный поток после scanf() mass = (char *)malloc(n*sizeof(char *)); // выделяется память под массив указателей, адрес первой ячейки сохраняется в mass while(i<n) // выполнять, пока не введено n-е количество имен { printf("Please, enter the name %d: ", i+1); // пожалуйста, введите i-е имя gets(str); // сохраняем введенное слово m = strlen(str); // определяем длину слова и сохраняем в m memory_for_string(mass+i, m); // запускаем функцию для выделения памяти под длину слова strcpy(*(mass+i), str); // копируем слово в выделенную память i++; } i=0; while(i<n) { printf("\nThe name %d is: %s", i+1, *(mass+i)); i++; } return 0; }
Решение задачи: «Работа с malloc - найти ошибку в коде»
textual
Листинг программы
typedef int shoesize_t; /*...*/ shoesize_t * arr = malloc(sizeof(shoesize_t) * NUMBER_OF_SHOES);
Объяснение кода листинга программы
- В первой строке определен тип данных
shoesize_t
, который представляет размер обуви. - В следующей строке происходит выделение памяти с помощью функции
malloc()
. Выделяется память для массиваarr
типаshoesize_t
, где каждый элемент массива будет содержать один размер обуви. Размер массива определяется переменнойNUMBER_OF_SHOES
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д