【发布时间】:2021-03-02 17:22:45
【问题描述】:
我在 c89 中编写这个程序来读取文件,但是我不断收到分段错误
我通过valgrind --leak-check=full --show-leak-kinds=all -v ./program 运行它,它指向两条 sscanf 行泄漏
运行程序,是两个文件名
./program cat.txt dog.txt 并遵守make文件 我已经释放它们并设置为空,但我仍然遇到这些问题,我附上了我的 [![valgrind errors here][1]][1]
的图片int main(int argc, char* argv[]){
char* cat = (char*)malloc(12 * sizeof (char));
char* dog = (char*)malloc(12 * sizeof (char));
/*float sleepTime;*/
/*if (argc != 4)
{
printf("Error - Enter file names");
}*/
sscanf(argv[1], "%s", cat);
sscanf(argv[2], "%s", dog);
sleepTime = atof(argv[3]);
readFile(cat);
readFile(dog);
free(cat);
free(dog);
cat = NULL;
dog = NULL;
}
我试图将事情注释掉,但仍然没有运气 任何帮助将不胜感激
【问题讨论】:
-
代码不完整。请提供minimal verifiable example - 包括所有缺失的代码、输入文件和用于运行程序的确切命令行。
-
还请包括实际的 Valgrind 输出。
-
对了,你这里使用动态分配的原因是什么?为什么不使用普通数组?
-
另一方面,
%[]格式说明符就是%[]。格式中没有s。除此之外,为什么还要在这里使用sscanf?命令行参数无论如何都不应该有换行符。 -
./program如果这确实是您调用程序的方式,那么它当然会出现段错误。没有命令行参数,在这种情况下argv[1]和argv[2]将是未定义的值。
标签: c memory arguments valgrind