我有一个使用C++98编写的应用程序,在32位系统上运行良好。但在64位系统上,它会随机崩溃。可能有10次完全不会崩溃,但接下来连续崩溃3次。
这种崩溃发生在菜单栏创建期间。这个菜单栏是一个继承自
这种崩溃发生在菜单栏创建期间。这个菜单栏是一个继承自
CToolBar
的类。const DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY;
m_menuBar.SetSizes( CSize( 16,15 ), CSize( 1,1 ) );
const BOOL bCreated = m_menuBar.CreateEx( this, TBSTYLE_FLAT | TBSTYLE_LIST, dwStyle, CRect(0,0,0,0), AFX_IDW_TOOLBAR );
最近,我们经理决定从Visual Studio 2010升级到Visual Studio 2019,但现在64位系统中崩溃问题已经变得严重,而32位系统还没有出现这种情况。
可能出现了什么问题呢?
以下是我代码的栈信息:
Kernel.dll!000000001f009540()
user32.dll!00007fff7c7c63ed()
user32.dll!00007fff7c7c5fbc()
user32.dll!00007fff7c7d28d3()
ntdll.dll!00007fff7e4dfe14()
win32u.dll!00007fff7c4c1f24()
user32.dll!00007fff7c7b8011()
user32.dll!00007fff7c7b7c04()
user32.dll!00007fff7c7db122()
mfc140d.dll!00007fff3ba05208()
mfc140d.dll!00007fff3b9f4e56()
mfc140d.dll!00007fff3b9f4715()
mfc140d.dll!00007fff3b84a4c3()
d.exe!CDcmMainFrame::CreateMenuBar() Line 1001
d_d.exe!CDcmMainFrame::OnCreate(tagCREATESTRUCTA * lpCreateStruct) Line 925
[External Code]
d_d.exe!CVSDicomApp::InitInstance() Line 3074
[External Code]
d.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 26
d_d.exe!main(int ac, char * * av) Line 24
[External Code]
this
不符合预期怎么办(即这是对之前出现故障的某些内容的跟进)?我能记得一个具体的问题:句柄被存储为DWORD
,在x86中很好,但在x64中可能会出现问题。这是不光彩的,因为句柄可能具有上32位为0的值。在这种情况下,它可以正常工作-您不会注意到失败。 - Scheff's Catthis
指针吗?还是崩溃实际上发生在SetSizes
中?在那里设置断点并检查。 - Jabberwocky