当我运行valgrind时,我收到以下消息:
大小为4的读取无效
在getdelim
通过getline
按主要(y行)
地址未堆栈,未分配或(最近)释放
int main() {
char *line = NULL;
size_t len = 0;
ssize_t read = 0;
FILE *fp = fopen(argv[2], "r");
read = getline(&line, &len, fp); //this is the line that gives error on valgrind
free(line);
fclose(fp);
}
为什么会这样?
答案 0 :(得分:3)
代码中涉及getline的唯一潜在错误是fopen失败,然后fp为NULL,然后将其提供给getline。
检查fopen函数的返回值,并使用perror或其他类似函数了解发生故障时的情况。
但我想指出的是,您正在使用argv,并且argv在代码中根本没有定义(它来自何处?),并且您不检查argv [2]是否存在(argc必须大于2),因此这些点也是潜在的故障。
答案 1 :(得分:0)
像这样使用main
int main(int argc, char *argv[]) { /* ... */ }
FILE *fp = fopen(argv[0], "r"); // This is a command line argument type of code.
xyz@abc:~$ ./a.out filename