使用 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
吗?
我是新来的,英语说得不是很好。 我对我的代码(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
吗?