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
вместо?