Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
Работа с malloc() в СИ
Всем привет.

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

Спасибо.
1 | Автор: murtukov | 2013-01-30, 07:06   |  Репутация: [ + 0 ]
  • Страница 1 из 1
  • 1
Поиск: