当前位置:  开发笔记 > 运维 > 正文

在Linux环境下的c程序中,"地址0x0没有堆栈,malloc'd或(最近)free'd"的错误

如何解决《在Linux环境下的c程序中,"地址0x0没有堆栈,malloc'd或(最近)free'd"的错误》经验,为你挑选了1个好方法。

[EDIT1:]

对于seqName,我将其声明为文件开头的全局参数

char seqName [20];

[EDIT2:]

在实际执行期间,不是那些传递给程序的数量?我只是使用valgrind工具得到以下消息.我输入的命令是:

jl @ ubuntu:〜/ work/dsr_analysis $ valgrind --tool = memcheck --leak-check = yes ./test

[EDIT3:]

抱歉,由于我是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,以及Julian Seward等人的GNU GPL'd.

== 28940 ==使用Valgrind-3.6.0.SVN-Debian和LibVEX;

用-h重新运行版权信息

== 28940 ==命令:./ test

== == 28940

== 28940 ==读取大小为1无效

== 28940 == at 0x40260CA:strcpy(mc_replace_strmem.c:311)

== 28940 == by 0x804A5C6:main(me_search.c:1428)

== 28940 ==地址0x0没有堆叠,malloc'd或(最近)免费

== == 28940

== == 28940

== 28940 ==使用信号11(SIGSEGV)的默认操作终止进程

== 28940 ==不在地址0x0的映射区域内访问

== 28940 == at 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个错误(被抑制:13个来自8个)1个上下文(被抑制:13个来自8个)

1个上下文(被压制:从8个中有13个)



1> 小智..:

你真的没有发布足够清晰的代码来确定,但如果你没有命令行参数调用你的可执行文件,那么argv[1]将包含一个NULL指针argv[2],argv[3]等等将包含未定义的值.

编辑:您需要在valgrind命令行上为程序提供参数(我猜 - 我自己不使用valgrind).就像是:

valgrind ... ./test foo bar zod

BTW,test在Linux/Unix上调用可执行文件是一个坏主意,因为它很容易与同名的shell内置混淆

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有