社区
C语言
帖子详情
有没有好点的方法可以定位内存泄漏或者访问越界的方法
nightkids_008
2011-06-30 10:49:32
RT,调试了一早上也没定位到准确的地方,公司电脑物理隔离所有没法贴代码了,请问下各位有没有好办法?
...全文
416
20
打赏
收藏
有没有好点的方法可以定位内存泄漏或者访问越界的方法
RT,调试了一早上也没定位到准确的地方,公司电脑物理隔离所有没法贴代码了,请问下各位有没有好办法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
就想叫yoko
2011-06-30
打赏
举报
回复
会崩溃?
那直接调试运行就可以了
nightkids_008
2011-06-30
打赏
举报
回复
[Quote=引用 2 楼 luciferisnotsatan 的回复:]
用工具查内存泄漏。
[/Quote]
lint 有没有效果?
nightkids_008
2011-06-30
打赏
举报
回复
[Quote=引用 1 楼 zhao4zhong1 的回复:]
设置内存值或变量值改变断点。
或者用liveheap软件。
[/Quote]
谢谢 我去看下,是条件断点么?
luciferisnotsatan
2011-06-30
打赏
举报
回复
用工具查内存泄漏。
赵4老师
2011-06-30
打赏
举报
回复
设置内存值或变量值改变断点。
或者用liveheap软件。
AnYidan
2011-06-30
打赏
举报
回复
上网搜一下,如果没记错 0XC0000005 涉及极广
nightkids_008
2011-06-30
打赏
举报
回复
[Quote=引用 18 楼 sdupoplar 的回复:]
对于内存泄露一般写代码时注意些就可以避免了。
对于越界,一般会引起崩溃,我经常用的方法,或许对你有用。
对于release版的程序,如果崩溃的话,我查找对应源代码的办法是:
首先记下程序崩溃的地址,这个程序崩溃时windows会提示0X.......。
然后,把源程序加上 /FAcs 选项再重新编译一下,加上该选项可以生成一个源代码、汇编代码、机器码都含有的文件。
然后,用olydl……
[/Quote]
谢谢,结贴早了。。。不然可以给分你的
赵4老师
2011-06-30
打赏
举报
回复
[Quote=引用 18 楼 sdupoplar 的回复:]
对于内存泄露一般写代码时注意些就可以避免了。
对于越界,一般会引起崩溃,我经常用的方法,或许对你有用。
对于release版的程序,如果崩溃的话,我查找对应源代码的办法是:
首先记下程序崩溃的地址,这个程序崩溃时windows会提示0X.......。
然后,把源程序加上 /FAcs 选项再重新编译一下,加上该选项可以生成一个源代码、汇编代码、机器码都含有的文件。
然后,用olydl……
[/Quote]
支持!
sdupoplar
2011-06-30
打赏
举报
回复
对于内存泄露一般写代码时注意些就可以避免了。
对于越界,一般会引起崩溃,我经常用的方法,或许对你有用。
对于release版的程序,如果崩溃的话,我查找对应源代码的办法是:
首先记下程序崩溃的地址,这个程序崩溃时windows会提示0X.......。
然后,把源程序加上 /FAcs 选项再重新编译一下,加上该选项可以生成一个源代码、汇编代码、机器码都含有的文件。
然后,用olydlg之类的反汇编软件找到崩溃地址对应的汇编代码和机器码,
用UE之类的文本编辑软件打开含有源代码、汇编代码、机器码都含有的文件,用搜索功能查找反汇编软件中崩溃地址附近的机器码也就是十六进制数,很快就可以找到位置了。
一般我几分钟就可以定位。
使用的人只要把崩溃地址告诉我,我就可以修改程序了。
nightkids_008
2011-06-30
打赏
举报
回复
谢谢各位,我把循环给去掉了,可能我对readdirectorychangesw的返回文件结构理解有问题,不应该用while来读取的,用了while会使得无效指针,感谢各位的帮忙,结贴了。
liufang421
2011-06-30
打赏
举报
回复
泄露有办法,
越界没什么好方法。
赵4老师
2011-06-30
打赏
举报
回复
[Quote=引用 13 楼 nightkids_008 的回复:]
引用 11 楼 luciferisnotsatan 的回复:
引用 10 楼 nightkids_008 的回复:
引用 9 楼 zhao4zhong1 的回复:
崩溃的时候进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。
call Stack始终在那个按钮对应的函数那里 没动过,但是我代码里面用了do{}while();这个do.……
[/Quote]
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
whlie (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
whlie (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。
帮断帖
http://topic.csdn.net/u/20110630/12/331b2c71-8101-408c-96e2-f92397caa4cf.html
wh_liu
2011-06-30
打赏
举报
回复
[Quote=引用 13 楼 nightkids_008 的回复:]
引用 11 楼 luciferisnotsatan 的回复:
引用 10 楼 nightkids_008 的回复:
引用 9 楼 zhao4zhong1 的回复:
崩溃的时候进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。
call Stack始终在那个按钮对应的函数那里 没动过,但是我代码里面用了do{}while();这个do.……
[/Quote]
不要因为死在do while里就觉得是这个本身的问题,也可能是其他地方引起的
nightkids_008
2011-06-30
打赏
举报
回复
[Quote=引用 11 楼 luciferisnotsatan 的回复:]
引用 10 楼 nightkids_008 的回复:
引用 9 楼 zhao4zhong1 的回复:
崩溃的时候进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。
call Stack始终在那个按钮对应的函数那里 没动过,但是我代码里面用了do{}while();这个do...while是不是本身有BUG。。。
do{}while……
[/Quote]
unhandled exception:0XC0000005 Access Violation
wh_liu
2011-06-30
打赏
举报
回复
调试,看函数调用堆栈信息
如果你不嫌麻烦,可以自己封装底层的申请函数,做一个内存池
luciferisnotsatan
2011-06-30
打赏
举报
回复
[Quote=引用 10 楼 nightkids_008 的回复:]
引用 9 楼 zhao4zhong1 的回复:
崩溃的时候进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。
call Stack始终在那个按钮对应的函数那里 没动过,但是我代码里面用了do{}while();这个do...while是不是本身有BUG。。。
[/Quote]
do{}while();没什么问题吧。
内存泄漏不会崩溃(除非把内存用完了)
必现的错误还是比较容易调试的。看看你的代码,数据有没有越界
unhandled exception... 具体报什么??
nightkids_008
2011-06-30
打赏
举报
回复
[Quote=引用 9 楼 zhao4zhong1 的回复:]
崩溃的时候进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。
[/Quote]
call Stack始终在那个按钮对应的函数那里 没动过,但是我代码里面用了do{}while();这个do...while是不是本身有BUG。。。
赵4老师
2011-06-30
打赏
举报
回复
崩溃的时候进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。
nightkids_008
2011-06-30
打赏
举报
回复
[Quote=引用 7 楼 anyidan 的回复:]
lz 确定了是内存泄露还是访问越界吗?
亦或只有段错误的提示?
先看看执行到哪一句出了问题。
[/Quote]
是一段在栈区的 存放FILE_NOTIFY_INFORMATIO结构,在循环几次之后,执行widechartomultibyte时候出现unhandled exception...
AnYidan
2011-06-30
打赏
举报
回复
lz 确定了是内存泄露还是访问越界吗?
亦或只有段错误的提示?
先看看执行到哪一句出了问题。
加载更多回复(1)
mysql安装教程,mac,windows
1、Mac 2、windows 3、下载MySQL 4、安装MySQL 5、使用MySQL
生成可读取配置文件的独立运行jar程序IDEA模版工程
周五刚躺下,前线打来语音要个下载文件的小程序,下载路径和下载码需要根据配置获取,程序需要在服务器执行。当然配置的设计是个人设计的,不然每次更新下载码都要重新出具jar包,太麻烦。多年没写独立运行的jar包了,翻阅了相关资料,最终还是功夫不负有心人。想着这种需求后续可能经常碰到,遂总结经验,整理成模版,为大家所用。 ————————————————————————————————— 原文链接:https://blog.csdn.net/xuanxiaochuan/article/details/137001184 根据文章创建的模版工程文件,下载后可直接编辑main
方法
,根据自己的需求自定义逻辑内容,编译后获取independent.jar文件,修改配置文件后,通过java -jar independent.jar 执行命令,正常执行。
世界读书日ppt模板x.pptx
世界读书日ppt模板x.pptx
Week+5.ipynb
Week+5.ipynb
L型单极性单相逆变电路simulink仿真
单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆变电路simulink仿真单极性单相逆
C语言
69,335
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章