【发布时间】:2011-02-28 14:12:41
【问题描述】:
[编辑1:]
对于seqName,我在文件开头声明为全局参数为
char seqName[20];
[编辑2:]
在实际执行期间传递给程序的不是那些数字吗?我仅使用 valgrind 工具就收到了以下消息。我输入的命令是:
jl@ubuntu:~/work/dsr_analysis$ valgrind --tool=memcheck --leak-check=yes ./test
[编辑3:]
对不起,由于我是Valgrind的新用户,所以在使用它时,我只在Edit2中输入命令。
但是,我的程序有一些命令行参数。
因此,我认为我最好通过新命令来调试我的程序:
valgrind --tool=memcheck --leak-check=yes ./test foreman.cif 352 288
有一段我的程序:
height = atoi(argv[3]);
width = atoi(argv[2]);
sprintf(seqName,"%s", argv[1]);
// strcpy(seqName, argv[1]);
编译后生成exe文件测试,然后我用Valgrind查看。 然后我收到以下消息,但是我不明白它会告诉我什么。 谁能提供一些帮助,谢谢。
jl@ubuntu:~/work/dsr_analysis$ valgrind --tool=memcheck --leak-check=yes ./test
==28940== Memcheck,内存错误检测器
==28940== 版权所有 (C) 2002-2009 和 GNU GPL,由 Julian Seward 等人撰写。
==28940== 使用 Valgrind-3.6.0.SVN-Debian 和 LibVEX;
使用 -h 重新运行以获取版权信息
==28940== 命令:./test
==28940==
==28940== 大小为 1 的无效读取
==28940== 在 0x40260CA:strcpy (mc_replace_strmem.c:311)
==28940== by 0x804A5C6: main (me_search.c:1428)
==28940== 地址 0x0 没有被堆栈、malloc 或(最近)释放
==28940==
==28940==
==28940== 进程以信号 11 (SIGSEGV) 的默认操作终止
==28940== 访问不在地址 0x0 的映射区域内
==28940== 在 0x40260CA:strcpy (mc_replace_strmem.c:311)
==28940== by 0x804A5C6: main (me_search.c:1428)
==28940== 如果您认为这是堆栈的结果
==28940== 程序主线程溢出(不太可能,但是
==28940== 可能),你可以尝试增加大小
==28940== 使用 --main-stacksize= 标志的主线程堆栈。
==28940== 本次运行使用的主线程堆栈大小为 8388608。
==28940==
==28940== 堆摘要:
==28940== 退出时使用:0 个块中的 0 个字节
==28940== 总堆使用量:0 次分配,0 次释放,0 字节分配
==28940==
==28940== 所有堆块都被释放——不可能有泄漏
==28940==
==28940== 对于检测到和抑制的错误计数,重新运行:-v
==28940== 错误摘要:1 个上下文中的 1 个错误(抑制:8 个中的 13 个)1 个上下文 (抑制:13 从 8)
1 个上下文(抑制:8 个中的 13 个)
【问题讨论】: