【发布时间】:2017-03-28 20:12:10
【问题描述】:
我正在尝试编写一个函数来读取文本文件并将文本文件的每一行复制到传递给函数的数组的一行中。
void read_lines(FILE* fp, char*** lines, int* num_lines) {
int i = 0, line_count = 0;
char line[256], c;
fscanf(fp, "%c", &c);
while(!feof(fp)){
if(c == '\n') {
++line_count;
}
printf("%c", c);
fscanf(fp, "%c", &c);
}
rewind(fp);
*num_lines = line_count;
lines = (char***)malloc(line_count * sizeof(char**));
while (fgets(line, sizeof(line), fp) != NULL) {
lines[i] = (char**)malloc(strlen(line) * sizeof(char*));
strcpy(*lines[i], line);
}
++i;
}
}
初始部分扫描换行符,以便我知道最初分配给行的数量。我不确定我哪里出错了。
此外,如果有人有任何资源可以帮助我更好地理解如何动态分配空间,那将不胜感激。
【问题讨论】:
-
需要赋值给
*lines来修改调用者的变量。这就是为什么你有三重指针。 -
valgrind 是调试一些内存问题的好工具。或者调试器。
-
*lines = malloc((line_count+1) * sizeof(char*));,(*lines)[i] = malloc(strlen(line) +1);,strcpy((*lines)[i], line);
标签: c memory segmentation-fault