C I';m获取分割错误和valgrind显示了getline的这个错误

C I';m获取分割错误和valgrind显示了getline的这个错误,c,valgrind,getline,C,Valgrind,Getline,当我运行valgrind时,我收到以下消息: 大小为4的读取无效 在格特利姆 通过getline 按干管(y线) 地址未被堆栈、malloc或(最近)释放 为什么会发生这种情况?在涉及getline的代码中,唯一的潜在错误是fopen失败,然后fp为NULL,然后将其交给getline 检查fopen函数的返回值,并使用perror或其他类似函数了解发生故障时的情况 但我想指出的是,您使用的是argv,并且argv在代码中根本没有定义(它来自哪里?),并且您没有检查argv[2]是否存在(arg

当我运行valgrind时,我收到以下消息:
大小为4的读取无效 在格特利姆 通过getline 按干管(y线) 地址未被堆栈、malloc或(最近)释放


为什么会发生这种情况?

在涉及getline的代码中,唯一的潜在错误是fopen失败,然后fp为NULL,然后将其交给getline

检查fopen函数的返回值,并使用perror或其他类似函数了解发生故障时的情况

但我想指出的是,您使用的是argv,并且argv在代码中根本没有定义(它来自哪里?),并且您没有检查argv[2]是否存在(argc必须大于2),因此这些点也是潜在的故障。

像这样使用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

欢迎来到堆栈溢出。请阅读,采取,阅读,以及。最后,学习如何创建一个向我们展示的问题。更具体地说,请将完整的Valgrind输出复制粘贴到问题正文中,无需修改。作为文本。然后包括一个显示问题的实际程序,而不是一些伪代码。您当前显示的代码缺少关键信息和上下文。这可能是一个愚蠢的问题,但您是否确实向程序传递了三个命令行参数?这是如何编译的?无法编译:
error:'argv'未声明(首次在此函数中使用)
Oh,rigth!argv[argc]==NULL
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