为什么Debug版运行正常,release版报错

sfyy 2002-03-28 12:57:25
我写的一个程序Debug版运行正常,release版报错运行中有时会报错:
“0x6bc41351”指令引用的"0x0000048c"内存。该内存不能为"read"
....
可能会是什么原因,应如何调试?
...全文
260 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzshow 2002-04-04
  • 打赏
  • 举报
回复
OnMsgBegin() 这里两个参数都要加入, 虽然你不用.
WPARAM ,LPARAM
zx_sanjin 2002-03-30
  • 打赏
  • 举报
回复
不过你最好还是先检查一下存不存在溢出~~~~ 一点建议~~~~
zx_sanjin 2002-03-30
  • 打赏
  • 举报
回复
不知道情况一不一样:

我的是工作线程向界面线程发送消息, 这个消息只是用来通知界面做显示结果! 我就在创建线程之前得到界面窗口的句柄, 然后在工作线程通过句柄来对窗口直接操作, 效率低了点, 但不会出错啊~~~
sfyy 2002-03-30
  • 打赏
  • 举报
回复
to zx_sanjin(1.5kg, 不赊账~~~)
确实用了多线程,
你后来是怎么解决的。
zx_sanjin 2002-03-30
  • 打赏
  • 举报
回复
我也遇到过这情况! 我怀疑是VC的BUG, 第一次发不错~~~第二次就错! 开始我也以为是指针的问题, 可后来我新建了一个测试程序专门看了看, 不是指针的问题!

你是不是用了多线程?

1. 你用postmessage试试
2. 重新启动计算机, 然后realse, rebuildall
3. 把代码考到另一台计算机编译!(有可能是库被破坏了)
4. 重新设计消息发送方法吧~~~
sfyy 2002-03-30
  • 打赏
  • 举报
回复
该问题好像确与自定义消息有关。错误是在第二次发送自定义消息后产生的(消息处理函数末尾)。

#define WM_MSGBEGIN (WM_USER+100)
...

//消息处理函数
LRESULT CFiveChessDlg::OnMsgBegin()
{
State = CS_BEWAITING;
StateChange();
AfxMessageBox("leaving handler");
return 0;
//就在此处报错
}
snsins 2002-03-29
  • 打赏
  • 举报
回复
<<Windows核心编程》里面说到过这个问题
具体的我记得不是很清楚了

看看你是不是有类似这样的语句 char *p="asfdsafasdf";
如果有,改成

char test[1000];
ZeroMemory(test,1000);
strcpy(test,"asfdsafasdf";);
试一试
不要直接用指针指向字符串,用字符缓冲区来试一试。

coowoo 2002-03-29
  • 打赏
  • 举报
回复
好多软件在98下没问题,到2000下经常出现该内存不能为"read"
搞不懂
houstond 2002-03-29
  • 打赏
  • 举报
回复
内存益处,比如数组过界
以及其它的内存问题都可能有这样
DEBUG好象没问题,而RELEASE有问题的现象
hello008 2002-03-29
  • 打赏
  • 举报
回复
把代码一句一句的封调,看是哪个语句出问题,然后再检查这个语句和前面的语句的内存错误。
Allen_cch 2002-03-29
  • 打赏
  • 举报
回复
是不是系统栈分配错误的原因?
clouds_wang 2002-03-28
  • 打赏
  • 举报
回复
内存操作错误
myheart8541_cn 2002-03-28
  • 打赏
  • 举报
回复
代码????
bzshow 2002-03-28
  • 打赏
  • 举报
回复
你自定义windows消息没有?
muqiao 2002-03-28
  • 打赏
  • 举报
回复
malloc分配内存空间再大一些试试看
kiko_lee 2002-03-28
  • 打赏
  • 举报
回复
代码,代码
zhang_qxian 2002-03-28
  • 打赏
  • 举报
回复
是啊。以我测试的经验来看,一般来说,很多人都不注意变量的初值问题。当你需要一个变量的时候,最好先初始化该变量。另外要防止野指针问题。这个问题一般不易觉察。譬如new了一块内存之后,然后delete了,你没有给该指针再赋值为NULL。在这种情况下,此指针就成为野指针,对此指针的操作用ASSERT(pointer!=NULL)是检查不出来的。所以,在程序中一定要注意初始化问题和指针操作问题。
zjp009 2002-03-28
  • 打赏
  • 举报
回复
通常是内存出了问题。
otuotu 2002-03-28
  • 打赏
  • 举报
回复
这个问题我也遇见到过,首先你要把所有的变量先赋上初始值,再检查一下又没有什么数租越界的问题,因为Debug和Release在编译上是不一样的。Debug不会为你检查的
我不是大明 2002-03-28
  • 打赏
  • 举报
回复
对,就是指针指空!
可能是你在Debug运行的时候也有这个问题但你没有执行到,或者这行有错的代码就在象
#ifndef _DEBUG
//you wrong codes here!
#endif
然后你在Release 中刚好执行到这句了,所有就出错了!
一般出现
0x6bc41351”指令引用的"0x0000048c"内存。该内存不能为"read"
都是程序里面用了一些没有指向内容的指针!
加载更多回复(9)

16,551

社区成员

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

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

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