Работа с malloc - найти ошибку в коде - C (СИ)

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

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

Всем привет. Написал программу, которая выделяет память под двумерный массив и сохраняет в него имена. Размер выделяемой памяти зависит от количества и длины слов, которое определяется пользователем. Программка рассчитана на сохранение n-го количества слов, которое также определяется пользователем в начале программы (при запуске). Вот, собственно, и сам код программы:
#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(). Прошу помочь найти ошибку в коде. Спасибо.

Решение задачи: «Работа с malloc - найти ошибку в коде»

textual
Листинг программы
typedef int shoesize_t;
/*...*/
shoesize_t * arr = malloc(sizeof(shoesize_t) * NUMBER_OF_SHOES);

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

  1. В первой строке определен тип данных shoesize_t, который представляет размер обуви.
  2. В следующей строке происходит выделение памяти с помощью функции malloc(). Выделяется память для массива arr типа shoesize_t, где каждый элемент массива будет содержать один размер обуви. Размер массива определяется переменной NUMBER_OF_SHOES.

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


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

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

5   голосов , оценка 3.6 из 5