CTime的Format疏失
CTime的Format出错
Format那里出错出现,换release就不会有问题!
Debug Assertion Failed!
proogram:…….exe
File:afx.inl
Line:122
------解决方案--------------------
我这是没问题的
------解决方案--------------------
既然出错了,打开堆栈窗口看看错误代码定位在哪里,分析一下。
------解决方案--------------------
局部删减代码,缩小范围定位
------解决方案--------------------
CString startTime,endTime;
CTime dateStart, timeStart, dateEnd, timeEnd;
((CDateTimeCtrl*)(GetDlgItem(IDC_DATE_START)))->GetTime(dateStart);
((CDateTimeCtrl*)(GetDlgItem(IDC_DATE_END)))->GetTime(dateEnd);
((CDateTimeCtrl*)(GetDlgItem(IDC_TIME_START)))->GetTime(timeStart);
((CDateTimeCtrl*)(GetDlgItem(IDC_TIME_END)))->GetTime(timeEnd);
startTime = dateStart.Format("%Y-%m-%d ") + timeStart.Format("%H:%M:%S");
endTime = dateEnd.Format("%Y-%m-%d ") +timeEnd.Format("%H:%M:%S");
=====
引自你的代码,我发现很多程序喜欢这种方式。这可能会少打几个字,但出现问题后就会不知所措
我觉得
CDateTimeCtrl* temp = (CDateTimeCtrl*)GetDlgItem(IDC_TIME_START);
ASSERT(temp!=NULL)
tmep->Gettime(starttime);
会更好一些
CString startTime,endTime;
CTime dateStart, timeStart, dateEnd, timeEnd;
((CDateTimeCtrl*)(GetDlgItem(IDC_DATE_START)))->GetTime(dateStart);
((CDateTimeCtrl*)(GetDlgItem(IDC_DATE_END)))->GetTime(dateEnd);
((CDateTimeCtrl*)(GetDlgItem(IDC_TIME_START)))->GetTime(timeStart);
((CDateTimeCtrl*)(GetDlgItem(IDC_TIME_END)))->GetTime(timeEnd);
startTime = dateStart.Format("%Y-%m-%d ") + timeStart.Format("%H:%M:%S");
endTime = dateEnd.Format("%Y-%m-%d ") +timeEnd.Format("%H:%M:%S");
Format那里出错出现,换release就不会有问题!
Debug Assertion Failed!
proogram:…….exe
File:afx.inl
Line:122
debug
------解决方案--------------------
我这是没问题的
CString startTime;
CTime dateStart;
dateStart = CTime::GetCurrentTime();
startTime = dateStart.Format("%Y-%m-%d ");
TRACE(startTime);
TRACE("\n");
------解决方案--------------------
既然出错了,打开堆栈窗口看看错误代码定位在哪里,分析一下。
------解决方案--------------------
File:afx.inl
Line:122
afx.inl 122 行是啥?120// CString
121 _AFX_INLINE CStringData* CString::GetData() const
122 { ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; } 撸主果断rebuild all 一下
rebuild 很多次, debuger也删除过! release下程序不会有问题!!!
release下没问题更危险,我想撸主是不是哪块程序段把内存搞乱了
这种怎么去查?
局部删减代码,缩小范围定位
------解决方案--------------------
CString startTime,endTime;
CTime dateStart, timeStart, dateEnd, timeEnd;
((CDateTimeCtrl*)(GetDlgItem(IDC_DATE_START)))->GetTime(dateStart);
((CDateTimeCtrl*)(GetDlgItem(IDC_DATE_END)))->GetTime(dateEnd);
((CDateTimeCtrl*)(GetDlgItem(IDC_TIME_START)))->GetTime(timeStart);
((CDateTimeCtrl*)(GetDlgItem(IDC_TIME_END)))->GetTime(timeEnd);
startTime = dateStart.Format("%Y-%m-%d ") + timeStart.Format("%H:%M:%S");
endTime = dateEnd.Format("%Y-%m-%d ") +timeEnd.Format("%H:%M:%S");
=====
引自你的代码,我发现很多程序喜欢这种方式。这可能会少打几个字,但出现问题后就会不知所措
我觉得
CDateTimeCtrl* temp = (CDateTimeCtrl*)GetDlgItem(IDC_TIME_START);
ASSERT(temp!=NULL)
tmep->Gettime(starttime);
会更好一些