2d динамическое распределение - PullRequest
0 голосов
/ 07 марта 2012

Я хочу динамически разместить массив символов.Итак, приведенный выше код

      void initialize(char **document_table, int size){

      int x, i, j, M;

      printf("how many words every line: ");  scanf("%d", &M);

     document_table = malloc(sizeof(char) * size);
     for(x = 0; x < size; x ++) {
     document_table[x] = malloc(sizeof(char) * M);
      }


     for(i=0; i<N; i++){
    for(j=0; j<N; j++){

        scanf("%c",&document_table[i][j]);   
     }
      }
      }

, но кажется, что после выделения памяти функция перестает работать.

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Объявление document_table = malloc(sizeof(char) * size); должно иметь sizeof(char*), поскольку двумерный массив - это массив указателей на одномерные массивы.

1 голос
/ 07 марта 2012

Проблема 1: char** document_table само передается по значению. Это означает, что вызывающий код, такой как:

char** document_table = 0;
initialize(document_table,2);
/* document_table still 0 here */

не будет инициализировать переданный параметр. Скорее всего, хотите сделать document_table возвращаемым значением или передать его адрес.

Выпуск 2: N должно быть size?

Проблема 3: scanf("%c") не соответствует определению M как «слова». %c представляет отдельные символы. Кроме того, текст every line подразумевает линейно-ориентированный ввод, но опять же это не то, что ищет сканирование. Если в документе хранятся слова, тогда:

  • документ представляет собой массив строк
  • строка представляет собой массив слов
  • слово представляет собой массив символов

Таким образом, документ на самом деле является трехмерным массивом символов.

0 голосов
/ 07 марта 2012

Вы должны разместить указатели в вашем массиве:

document_table = malloc(sizeof(char*) * size);

Обратите внимание на char* в операторе sizeof ()

...