有没有人遇到过这三个问题:解决一个100分

时间:2021-05-27 19:17:51
1.按F5Debug时,到某一步(发现是到MFC内部)发生中断,然后进入汇编代码,可是把BoundsChecker监视打开后,在F5就正常,请问如何在不开BC的情况下回复正常。
2.一个新的线程,传递的参数有几个char*,在起动线程的地发地方为他们传递参数,进到现成里边后:当按F5时一切正常,同样是Debug版,Ctrl+F5时这些char*为NULL(我用AfxMessageBox一步一步跟下来看到的),怎么回事?
3.用MemDC.h作成的自画类,Debug是正常,Release时,每当Dialog*第一次*出现时:有的Dialog一出现整个Dialog背景就变黑,有的有时候会变黑,有的从没有变黑过(可能是有时候会变黑的一个特例,现在只能通过显示的调用RedrawWindow()刷新一次Dialog解决)我保证MemDC没有问题(网上流行的版本),自画类也没有明显得区分Debug和Release的地方,只要我把自画类的对象去掉,就没问题。

16 个解决方案

#1


第二个问题可能是那个char*是在主线程里面分配的,并且在创建完线程后就删除了。这种情况有可能在子线程里使用这个变量时可能是NULL,也可能不是。

#2


可是我在主线程中已经把char*作为参数传给了子线程了。最奇怪的是F5时就正常,CTRL+F5时就失败。

#3


2.很可能是你把char*作成了局部变量.不同线程有各自的stack,局部变量不能共享的.要么用全局变量,要么用堆变量,就不会出问题了.

#4


谢谢,我明白第二个问题了

#5


up

#6


up

#7


down

#8


left

#9


right

#10


#11


天灵灵、的灵灵,SB李洪痔快显灵

#12


第一个问题我感觉是你程序中有一个小问题,但boundchecker把它修复了,boundchecker有修复的功能

#13


o?我试试赶快~~

#14


>第一个问题我感觉是你程序中有一个小问题
小问题?呜呼。我的程序Release和Debug还算正常。

#15


这年头什么事都得靠自己>:第三个问题也解决了:MemDC类的构造函数有一个鬼rect参数,缺省时为(0,0,0,0),该函数此时会给赋值为pDC->GetClipBox(&rect),如果使用MemDC的类在OnPaint中这样构造的话:
CPaint(dc);
CMemDC(&dc);
对于某写Style的Dialog就会在Release下黑屏(就是CMemDC中pDC->GetClipBox(&rect)闹得)
而写成
CPaint(dc);
CRECT rect;
GetClientRect(&rect);
CMemDC(&dc,rect);
就OK了。
TMD,DEBUG正常,Release黑屏,老子是用AfxMessageBox()一步一步Box出来的。


#16


看来第一个问题得问TMD微软了。

#1


第二个问题可能是那个char*是在主线程里面分配的,并且在创建完线程后就删除了。这种情况有可能在子线程里使用这个变量时可能是NULL,也可能不是。

#2


可是我在主线程中已经把char*作为参数传给了子线程了。最奇怪的是F5时就正常,CTRL+F5时就失败。

#3


2.很可能是你把char*作成了局部变量.不同线程有各自的stack,局部变量不能共享的.要么用全局变量,要么用堆变量,就不会出问题了.

#4


谢谢,我明白第二个问题了

#5


up

#6


up

#7


down

#8


left

#9


right

#10


#11


天灵灵、的灵灵,SB李洪痔快显灵

#12


第一个问题我感觉是你程序中有一个小问题,但boundchecker把它修复了,boundchecker有修复的功能

#13


o?我试试赶快~~

#14


>第一个问题我感觉是你程序中有一个小问题
小问题?呜呼。我的程序Release和Debug还算正常。

#15


这年头什么事都得靠自己>:第三个问题也解决了:MemDC类的构造函数有一个鬼rect参数,缺省时为(0,0,0,0),该函数此时会给赋值为pDC->GetClipBox(&rect),如果使用MemDC的类在OnPaint中这样构造的话:
CPaint(dc);
CMemDC(&dc);
对于某写Style的Dialog就会在Release下黑屏(就是CMemDC中pDC->GetClipBox(&rect)闹得)
而写成
CPaint(dc);
CRECT rect;
GetClientRect(&rect);
CMemDC(&dc,rect);
就OK了。
TMD,DEBUG正常,Release黑屏,老子是用AfxMessageBox()一步一步Box出来的。


#16


看来第一个问题得问TMD微软了。