Как выделить необходимую память многомерного массива в C? - PullRequest
0 голосов
/ 26 января 2019

Мне нужно написать программу, которая читает текстовый файл.Символы файла должны храниться в массиве с двумя указателями или многомерном массиве.

Прежде всего я должен выяснить, сколько строк в текстовом файле.Первое измерение массива равно количеству строк, второе всегда имеет размер 256. Я должен выделить память, необходимую для массива.

Я уже получил это:

typedef struct _content {
    int length;
    char **lines;    
} content_t;

...

FILE *ptr;
    ptr = fopen("C:/Users/...txt", "r");
    struct _content cont;
    cont.length = 1;    
    cont.lines = malloc(sizeof(char*)*inhalt.length); 
    cont.lines[0] = malloc(255);
char c = fgetc(ptr);

...

while(c != EOF)    
    {
        cont.lines[curline][curchar] = c;

        if(c == '\n')       //to check if there is a wordwrap
        {
            cont.length++;      
            curline++;      //indicates the current line
            cont.lines[curline] = malloc(255); //thats the line where I try to allocate the memory that will be needed
            curchar = 0;    //indicates the current character of the line
        }
        else
        {
        curchar++;
        }
        c = fgetc(ptr);    
        printf("%c", c);    //to print out the content of the file (this works perfetly fine)

    }             

...

printf("\nCharacter at 10/ 0: %c", cont.lines[10][0]);

Я ожидаю, что программа напечатает все символы файла на консоли.Это отлично работает.Также следует распечатать первый символ строки 10, который не работает.Я не получаю никаких сообщений об ошибках.

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 26 января 2019
cont.lines[curline] = malloc(255); //thats the line where I try to allocate the memory that will be needed

 // you don't try to malloc everytime you read a char but everytime you have a new line :
  if(curchar==0)
    cont.lines[curline] = malloc(255); 
...