C динамическое распределение с реаллоком символа **

Я новичок здесь и не очень хорошо говорю по-английски. У меня есть вопрос, касающийся моего кода (в C).

Что должен делать код: существует файл с именем "g.txt", который нужно открыть. Затем он читает его построчно и копирует каждую строку в буфер (zpuffer[200]), после этого содержимое буфера должно быть скопировано с помощью strcpy в **Dfile, **Dfile указывает на char*его пространство было сначала выделено malloc, Если **Dfile недостаточно места для сохранения, код выполняется reallocТо, что должно сделать больше свободного места.

Первый раз realloc я уже получил больше места! Но во второй раз это не сработало; ОС, Ubuntu, говорит (по-немецки): "Bus-Zugriffsfehler (Speicherabzug geschrieben)". Английский: "Ошибка доступа к шине (записанный дамп)"

Вот мой код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define OBJS 10 //new Lines a one time for **Dfile

int main(void){
FILE *datei;
datei=fopen("g.txt", "r");
if (datei == NULL){
    fprintf(stderr, "\nFEHLER\n");
    return 1;
}

char zpuffer[200]; //buffer
char **Dfile; //save content of g.txt line by line, every line has its own index

int zeilen = 0; //the actual amount of lines
int speicher = 0; //total indices in **Dfile    
Dfile = (char**)malloc(sizeof(char**)*(speicher + OBJS));
speicher += OBJS;   

while (fgets(zpuffer, 199, datei) != NULL){ 
    if (speicher <= zeilen){//speicher <= zeilen --> allocate memory
        Dfile = (char**)realloc(*Dfile, sizeof(char**)*(speicher + OBJS)); //!!ERROR!! but just the second time!!
        if (Dfile == NULL){
            fprintf(stderr, "\nFEHLER Alloc\n");
            return 1;
        }           
        speicher += OBJS;
    }

    Dfile[zeilen]=malloc(strlen(zpuffer)+1);
    strcpy(Dfile[zeilen++], zpuffer);       
    printf("%s", Dfile[zeilen - 1]);    
}
return 0;
}

Может кто-нибудь помочь мне, пожалуйста?

1 ответ

Решение

Вы передаете *Dfile в realloc(),

Вы хотели пройти Dfile вместо?

Другие вопросы по тегам