使用 char 的 realloc 的 C 动态分配**

C dynamic allocation with realloc of a char**

我是新来的,英语说得不是很好。 我对我的代码(C 语言)有疑问。

代码应该做什么: 存在一个名为 "g.txt" 的文件,应将其打开。然后逐行读取并将每一行复制到缓冲区 (zpuffer[200]) 中,之后应使用 strcpy 将缓冲区的内容复制到 **Dfile**Dfile指向一个char*,它的space先分配了malloc。如果 **Dfile 没有足够的 space 用于保存,代码将执行 realloc,这应该会释放更多 space.

第一次叫realloc,居然还多了space!但是第二次,它没有用; OS、Ubuntu 说(德语):"Bus-Zugriffsfehler (Speicherabzug geschrieben)"。英语:"Bus access error (written dump)"

这是我的代码

#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;
}

有人可以帮帮我吗??

您将 *Dfile 传递给 realloc()

您是想通过 Dfile 吗?