【发布时间】:2016-02-17 19:14:30
【问题描述】:
我在 Visual Studio 2013、Win7 32 位上开发 C++/MFC 应用程序。我有一个带有对话框的主应用程序,我在其中放置了一个 DateTimePicker MFC 对象。对于初始化,我使用了DDX_DateTimeCtrl 和m_odtFilterData 成员变量。
void CClassDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_DateTimeCtrl(pDX, IDC_DATE, m_odtFilterData);
}
BOOL CClassDlg::OnInitDialog()
{
COleDateTime odtCurrDate = COleDateTime::GetCurrentTime();
m_odtFilterData.SetDate(odtCurrDate.GetYear(), 1, 1);
CDialog::OnInitDialog();
//etc etc
UpdateData(FALSE);
return TRUE;
}
添加日期时间更改事件后
BEGIN_MESSAGE_MAP(CClassDlg, CDialog)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATE, &CClassDlg::OnDtnDatetimechange)
END_MESSAGE_MAP()
和
void CClassDlg::OnDtnDatetimechange(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMDATETIMECHANGE pDTChange = reinterpret_cast<LPNMDATETIMECHANGE>(pNMHDR);
if(m_odtExampleODTVarThatIHave > m_odtFilterData)
{
//do stuff
}
*pResult = 0;
}
问题是,当我在对话框中使用 datetimepicker 选择日期时,有时应用会因以下错误而崩溃:
Windows has triggered a breakpoint in AppName.exe.
This may be due to a corruption of the heap, which indicates a bug in AppName.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while AppName.exe has focus.
The output window may have more diagnostic information.
输出只说:
HEAP[AppName.exe]: HEAP: Free Heap block 279850 modified at 279e1c after it was freed
而且断点卡在mfc\appmodul.cpp:
extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine, int nCmdShow)
#pragma warning(suppress: 4985)
{
// call shared/exported WinMain
/*->*/return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
这很奇怪,只需单击显示月份小部件的 datetimepicker 按钮几次。如果,而不是小部件,我使用 Spin Control 一切正常......你有什么想法吗? The button that open the month widget
另一件事,如果我删除了
if(m_odtExampleODTVarThatIHave > m_odtFilterData)
一切正常。似乎由于某种原因,m_odtFilterData 变量被月份小部件损坏。我不明白我的错误在哪里。
【问题讨论】:
标签: c++ visual-c++ visual-studio-2013 mfc datetimepicker