出现0x0000002c内存不能为"read"的问题

martenyong 2010-11-22 09:29:35
编的程序跑了几次以后出了这个问题。
不是每一次都出,间歇性的。
都是某某内存指向0x0000002c内存,该内存不可读。
请问可能是什么问题?

我现在想到的唯一的可能就是有野指针,但是应该都处理了,
只差一个,有一个在函数内部申请的指针,申请完后让它指向一个数组,然后进行一系列操作,但是最后指针没有释放,也就是没有管它,请问这个会影响的么?

谢谢!
...全文
1411 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
martenyong 2010-11-30
  • 打赏
  • 举报
回复
谢谢大家了,
目前没检查出别的问题,程序运行基本稳定,目前认定应该就是图片没有写入就开始读得问题了。
用户 昵称 2010-11-23
  • 打赏
  • 举报
回复
只有调试。
lazy_2010 2010-11-23
  • 打赏
  • 举报
回复
多使用调试器,在调试环境下运行
ouyh12345 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 martenyong 的回复:]

现在发现一个很奇怪的现象,
程序中用HeapAlloc分配了一些内存,
如果这些内存使用一次就用HeapFree释放一次的话,出问题的几率就会小一点,
如果申请完后在程序结束时才释放的话,出问题的几率就会高一些,
这个是观察的得到的结果,请问确实有联系么?
[/Quote]

几率减少,并不是不发生,还是得调试
martenyong 2010-11-23
  • 打赏
  • 举报
回复
现在发现一个很奇怪的现象,
程序中用HeapAlloc分配了一些内存,
如果这些内存使用一次就用HeapFree释放一次的话,出问题的几率就会小一点,
如果申请完后在程序结束时才释放的话,出问题的几率就会高一些,
这个是观察的得到的结果,请问确实有联系么?
m_tornado 2010-11-23
  • 打赏
  • 举报
回复
调试才是硬道理~
ouyh12345 2010-11-23
  • 打赏
  • 举报
回复
崩溃后调试啊

release也可以调试的,只要生成pdb符号文件
兔子-顾问 2010-11-23
  • 打赏
  • 举报
回复
能确定哪行出错么?在所有的io之前写日志?
花熊 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 martenyong 的回复:]
还在调试中,

第一个程序控制摄像头向内存中存入jpg文件,第二个程序负责读取。
第二个程序如果按照一定的格式找到了jpg文件的名字就开始读取。
目前怀疑的问题所在是,
第一个程序通过数据流写入jpg的时候,是先建立了空的jpg文件,然后在写入的,而没等写入完成,第二个程序就已经来读取数据了。
这里改进了一下,目前似乎是没有问题,请问这么想合理不?
[/Quote]应该和这个没有关系,如果这些内存使用一次就用HeapFree释放一次的话,出问题的几率就会小一点,会不会是你在程序运行中改变了指针指向的地址?指针不再指向初始的内存地址引起的?
adropofsnow 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 martenyong 的回复:]
还在调试中,

第一个程序控制摄像头向内存中存入jpg文件,第二个程序负责读取。
第二个程序如果按照一定的格式找到了jpg文件的名字就开始读取。
目前怀疑的问题所在是,
第一个程序通过数据流写入jpg的时候,是先建立了空的jpg文件,然后在写入的,而没等写入完成,第二个程序就已经来读取数据了。
这里改进了一下,目前似乎是没有问题,请问这么想合理不?
[/Quote]

从0x0000002c这个值来看,不像这个问题。但强制读取还没有写完成的文件,肯定是有问题。
Eleven 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 martenyong 的回复:]
现在发现一个很奇怪的现象,
程序中用HeapAlloc分配了一些内存,
如果这些内存使用一次就用HeapFree释放一次的话,出问题的几率就会小一点,
如果申请完后在程序结束时才释放的话,出问题的几率就会高一些,
这个是观察的得到的结果,请问确实有联系么?
[/Quote]
你会是修改了指针的地址,最后释放了这些指针。。。
suhuaiqiang_janlay 2010-11-23
  • 打赏
  • 举报
回复
0x0000002c:正常情况下,调用分配内存的函数,是分配不到这地址的内存的。因此,只有可能是你自己指针偏移的时候把地址偏到这里去了。
LuciferStar 2010-11-23
  • 打赏
  • 举报
回复
有借有还,再借不难。
suhuaiqiang_janlay 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaohuh421 的回复:]
0x0000002c内存 看这个就知道不是野指针,应该是你的有个指针为空,你又为它加了个偏移.

你可以找下你的程序中,哪里有对一个指针偏移访问,你数组中很有可能,访问时先判断下是否为空吧

你用调试模式运行,出错时就可以进入中断,看运行栈就知道哪里出问题了.
[/Quote]

没错,楼主需要检查你的这个指针是不是在空指针的基础上发生偏移。
martenyong 2010-11-23
  • 打赏
  • 举报
回复
还在调试中,

第一个程序控制摄像头向内存中存入jpg文件,第二个程序负责读取。
第二个程序如果按照一定的格式找到了jpg文件的名字就开始读取。
目前怀疑的问题所在是,
第一个程序通过数据流写入jpg的时候,是先建立了空的jpg文件,然后在写入的,而没等写入完成,第二个程序就已经来读取数据了。
这里改进了一下,目前似乎是没有问题,请问这么想合理不?
muzizongheng 2010-11-22
  • 打赏
  • 举报
回复
有问题啊。 申请后必须释放。
xiaohuh421 2010-11-22
  • 打赏
  • 举报
回复
0x0000002c内存 看这个就知道不是野指针,应该是你的有个指针为空,你又为它加了个偏移.

你可以找下你的程序中,哪里有对一个指针偏移访问,你数组中很有可能,访问时先判断下是否为空吧

你用调试模式运行,出错时就可以进入中断,看运行栈就知道哪里出问题了.
信阳毛尖 2010-11-22
  • 打赏
  • 举报
回复
你用完了之后释放得了呗
wltg2001 2010-11-22
  • 打赏
  • 举报
回复
只差一个,有一个在函数内部申请的指针,申请完后让它指向一个数组,然后进行一系列操作,但是最后指针没有释放,也就是没有管它,请问这个会影响的么?
========
可能是这个原因,解决它再试试不就行了。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧