//Quick concatenate, I should use concatain but nah. snprintf(filePath,sizeof(filePath), "%s/%s/%s",FOLDER_MAIN, "test", "data.txt"); fp = fopen(filePath, "r"); if (fp != NULL) while ((read = getline(&line, &len, fp)) != -1) if(startsWith(line, "value:")) removeSubstring(line, "value:"); removeSubstring(line, " "); removeSubstring(line, "\t"); removeSubstring(line, "\n"); printf("%d\t%s\n", 0, line); fclose(fp); //Free line pointer, is it really needed ? if (line) free(line); int StartsWith(const char *a, const char *b) if(strncmp(a, b, strlen(b)) == 0) return 1; return 0; void removeSubstring(char *s,const char *toremove) while( s=strstr(s,toremove)) memmove(s,s+strlen(toremove),1+strlen(s+strlen(toremove))); 另外,'free(line)'也使程序崩溃。 我添加了removeSubstring和StartsWith函数,希望能有所帮助。总之,我认为这对程序影响不大,因为问题出在FP上......

5 个评论
是否真的需要? - 如果没有看到 line 的声明,怎么能回答这个问题?
请做一个 最低限度的可重复的例子 来显示 line 的整个生命。它被初始化了吗?它是否被malloc了?是否已经释放了?...
如果你用free删除这一行,它会崩溃吗?如果没有,请将标题改为 "free()时崩溃"。
不要承诺。要证明。展示。MCVE,请。
你需要初始化Len
c
linux
crash
fopen
fclose
user5454875
user5454875
发布于 2018-01-09
1 个回答
Stargateur
Stargateur
发布于 2018-01-09
已采纳
0 人赞同

你的代码是未定义的行为。

getline的原型是明确的 ssize_t getline(char **lineptr, size_t *n, FILE *stream); ,你必须使用 correct 类型,特别是当你使用指针!