私は問題に巻き込まれており、あなたが私を助けてくれたら非常に感謝します。静的メソッドで使用されるCString
私はMDIを持っている、とCDocumentのクラスでは、私が構造を持っている:
CMyDoc.h
class CMyDoc : public CDocument
{
...
struct SRecord
{
SRecord(){}
virtual ~SRecord(){}
CString sName;
CString sState;
CString sDateu;
CString sDatec;
};
CTypedPtrArray<CPtrArray, SRecord*> m_arrRecord;
とどこかに私はデータで、この構造体をロード:
OK 。
void CMyDoc::SortData(int nColumn, BOOL bAscending)
{
switch(nColumn)
{
case 9:
if(bAscending)qsort((void*)m_arrRecord.GetData(), m_arrRecord.GetSize(), sizeof(SRecord), CompareDateUAscending);
else qsort((void*)m_arrRecord.GetData(), m_arrRecord.GetSize(), sizeof(SRecord), CompareDateUDescending);
break;
...
}
をするが、データは静的メソッドでアクセスする場合問題は次のようになります。:私は、データをソートしようとしています
int CMyDoc::CompareDateUDescending(const void* arg1, const void* arg2)
{
SRecord* Record1 = (SRecord*)arg1;
SRecord* Record2 = (SRecord*)arg2;
if(Record1->sDateu.IsEmpty() || Record2->sDateu.IsEmpty()) // <--- crash !
return 0;
COleDateTime dL, dR;
dL.ParseDateTime(Record1->sDateu);
dR.ParseDateTime(Record2->sDateu);
return (dL == dR ? 0 : (dL < dR ? 1 : -1));
}
とクラッシュがここに( atlsimpstr.h を)私を取る:
CStringData* GetData() const throw()
{
return(reinterpret_cast< CStringData* >(m_pszData)-1); // the crash lead me on this line
}
私は間違っていますか?
ご協力いただければ幸いです。
更新:
私はこれを試してみました:
int CMyDoc::CompareDateUDescending(const void* arg1, const void* arg2)
{
SRecord* Record1 = *(SRecord**)arg1; // <-- OK
SRecord* Record2 = *(SRecord**)arg2; // <-- Unhandled exception* see note below
if(Record1->sDateu.IsEmpty() || Record2->sDateu.IsEmpty())
return 0;
COleDateTime dL, dR;
dL.ParseDateTime(Record1->sDateu);
dR.ParseDateTime(Record2->sDateu);
return (dL == dR ? 0 : (dL < dR ? 1 : -1));
}
とクラッシュが私に言った:
"未処理の例外は、ユーザー・コールバックの間に発生しました。"奇妙な...
デバッグヘルプを求める質問には、エラーメッセージとともに[mcve]が含まれている必要があります。また、コードが何をすべきか、どのようにそれができないのかを記述する必要があります。 Atmは何が問題なのか明確ではありません – user463035818
わかりました。 – flaviu2
1つの問題: 'sizeof(SRecord)'は 'sizeof(SRecord *) 'でなければなりません – franji1