| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1210 人关注过本帖
标题:Debug Assertion failed! 这是什么错误
只看楼主 加入收藏
fwherr
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2014-6-8
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:6 
Debug Assertion failed! 这是什么错误
请高手帮帮忙,谢谢
在编译的出错提示是: 在附件有信息说明(报错信息
报错提示.zip (91.67 KB)


Debug Assertion failed!
Program: D:\rgri\bin\test.exe
File:afxcoll.inl
Line:376
搜索更多相关主题的帖子: failed 信息 
2015-01-16 22:29
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:10 
MFC42D.DLL是用于调试mfc程序,尝试用release编译文件,如果无问题则是程序部分模块特殊性而无法调试,报错原因是内存指针错误一般为无法分配内存或错误的分配地址,指针指向0x00005这部分是保留地址也许是你程序内代码未初始化就调用了这种逻辑错误。调试跟踪和程序正常启动时两码事。
如果release版还是出错就检查程序是否有问题。
2015-01-18 10:21
fwherr
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2014-6-8
收藏
得分:0 
用release编译文,我没使用过,能检测出问题吗
CStringList* CListCtrlPop::SelectStringList(int number, CStringList *newstringlist)
{
  .........
    m_iColumns=number;
    this->m_strlist=newstringlist;

     ...............           
    CString str;
    ........
    for(int i=0;i<m_iColumns;i++)
    {
        this->m_listctrl->InsertColumn(i,m_strlist[i].GetHead()); 程序调试到这里出错
        col_length[i]=max(col_length[i],m_strlist[i].GetHead().GetLength());
        POSITION pos=m_strlist[i].FindIndex(1);
        for(int j=1;pos!=NULL;j++)
        {
            str=m_strlist[i].GetNext(pos);
            col_length[i]=max(col_length[i],str.GetLength());
        }
        m_listctrl->SetColumnWidth(i,col_length[i]*10);//LVSCW_AUTOSIZE_USEHEADER
    }
    .........
}
this->m_listctrl->InsertColumn(i,m_strlist[i].GetHead()); 程序调试到这里出错
出错堆栈的提示信息:
    First-chance exception in al.exe (MFC42D.DLL): 0xC0000005: Access Violation.

怎样解决谢谢
2015-01-18 12:15
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
First-chance exception in al.exe (MFC42D.DLL): 0xC0000005: Access Violation.//翻译过来是:第一次意外的异常 在MFC42D.DLL中非法访问了0xC0000005地址


this->m_listctrl->InsertColumn(i,m_strlist[i].GetHead());
找到自身类成员m_listctrl下属InsertColumn,然后查看它的参数是什么,作用是什么,是InsertColumn本身问题还是传入参数问题
i或者m_strlist[i].GetHead()需要初始化又或者方法不对又或者使用中没有返回错误而去正常使用它。


我不知道你用的什么版本编译器,用release编译一次,不要用debug调试模式。看看有没有错误
2015-01-18 12:58
fwherr
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2014-6-8
收藏
得分:0 
m_listctrl下属InsertColumn,InsertColumn的参数是不是 这个 m_plistTH->InsertColumn( i, "商品编号" );

bool CDlgXSTH::InitnListTH()
{
    ……….

    int i=0;

    m_plistTH->InsertColumn( i, "商品编号" );
    m_plistTH->InsertColumn( 1, "商品名称" );
    m_plistTH->InsertColumn( 2, "仓库名称" );
    m_plistTH->InsertColumn( 4, "数量" );
    m_plistTH->InsertColumn( 5, "金额" );
    ….
    ……....

}
InsertColumn作用是什么,不是很明白,是InsertColumn本身问题还是传入参数问题,怎样判断是传入还是传出,
还有i或者m_strlist[i].GetHead()需要初始化又或者方法不对又或者使用中没有返回错误而去正常使用它。是不是上面的代码 int i=0;    CListCtrl*     m_listctrl;
m_strlist[i].GetHead()需要初始化,怎样初始化

我的基础很差,谢谢帮指点下
2015-01-18 16:36
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
你这样别人帮不了你啊,光凭这些怎么知道是怎么回事,而且并不是说逻辑上有错误,提示错误是因为编译器跟踪的时候发生错误,而不是说程序正常运行出错。

CListCtrl*     m_listctrl;//这是一个指针,有实例化过没有?
没找到CListCtrl::GetHead();这是被二次封装过的?
2015-01-18 17:53
fwherr
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2014-6-8
收藏
得分:0 
谢谢,
    源代码在这是
程序代码:
CListCtrlPop类
CStringList* CListCtrlPop::SelectStringList(int number, CStringList *newstringlist)
{
    if(number<0)
    {
        MessageBox("stringlists.number<0");
        return NULL;
    }
    ASSERT(newstringlist!=NULL);

    CStringList* temp=m_strlist;
    m_iColumns=number;
    this->m_strlist=newstringlist;

    this->ClearListAllColumn();        

    int length=0;                     
    CString str;
    int* col_length=new int[m_iColumns];   
    for(int k=0;k<m_iColumns;k++)
        col_length[k]=8;
    for(int i=0;i<m_iColumns;i++)
    {
        this->m_listctrl->InsertColumn(i,m_strlist[i].GetHead()); //编译到这里出错
        col_length[i]=max(col_length[i],m_strlist[i].GetHead().GetLength());
        POSITION pos=m_strlist[i].FindIndex(1);
        for(int j=1;pos!=NULL;j++)
        {
            str=m_strlist[i].GetNext(pos);
            col_length[i]=max(col_length[i],str.GetLength());
        }
        m_listctrl->SetColumnWidth(i,col_length[i]*10);//LVSCW_AUTOSIZE_USEHEADER
    }
    for(k=0;k<m_iColumns;k++)
        length=length+col_length[k];
    m_listctrl->MoveWindow(0,0,length*10+18,this->m_rectShow.Height()-7);
    m_rectShow.right=length*10+26;
    delete [] col_length;
    return temp;
}
CDlgXSTH 类
bool CDlgXSTH::InitnListTH()
{
    CRect rect_nlist(10,350,700,650);
    this->GetClientRect(&rect_nlist);
    rect_nlist.top=150;
    rect_nlist.left+=10;
    rect_nlist.right-=10;
    rect_nlist.bottom=330;
    this->m_plistTH=new CListXSTH(m_bXsth,this->m_strPh);
    m_plistTH->Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|
        WS_BORDER,rect_nlist,this,ID_NEWLISTLSXSDJ);
    //this->m_plistTH->OnParentMoved();

    this->m_plistTH->ModifyStyle(LVS_EDITLABELS, 0L);       
    m_plistTH->ModifyStyle(0L, LVS_REPORT);           
    m_plistTH->ModifyStyle(0L, LVS_SHOWSELALWAYS);       
    m_plistTH->ModifyStyle(0L, LVS_NOSORTHEADER);
//    m_plistTH->SetBkColor(RGB(0,200,200));
//    m_plistTH->SetTextBkColor(RGB(0,200,200));

    m_plistTH->ModifyStyle( LVS_OWNERDRAWFIXED,0L);
    m_plistTH->SetExtendedStyle( LVS_EX_FULLROWSELECT |       
    //    LVS_EX_HEADERDRAGDROP |       
        LVS_EX_GRIDLINES |   
    //    LVS_EX_ONECLICKACTIVATE |   
        LVS_EX_FLATSB                  
    //    LVS_EX_UNDERLINEHOT
        );   
    CString str;
    // 1、先产生numTitle列
//    m_plistTH->SetItemCount(20);
    int i=0;

    m_plistTH->InsertColumn( i, "商品编号" );
    m_plistTH->InsertColumn( 1, "商品名称" );
    m_plistTH->InsertColumn( 2, "仓库名称" );
    m_plistTH->InsertColumn( 4, "数量" );
    m_plistTH->InsertColumn( 5, "金额" );
    if(this->m_bXsth)
    {
    m_plistTH->InsertColumn( 3, "单价" );
    }
    else
    {
    m_plistTH->InsertColumn( 3, "进价" );
    }

// 2、插入1行

    m_plistTH->InsertItem(0,"");

    // 3、调整列宽
    RECT rect2;
    m_plistTH->GetWindowRect(&rect2);
    int wid = rect2.right - rect2.left;

    for( i=0; i<6; i++ )
    {

        m_plistTH->SetItemText(0,i,"");
        m_plistTH->SetColumnWidth( i, wid/6 );
    }
   
    m_plistTH->SetSubItemCanEdited(0);
    m_plistTH->SetSubItemCanEdited(1);
    m_plistTH->SetSubItemCanEdited(2);
    m_plistTH->SetSubItemCanEdited(3);
    m_plistTH->SetSubItemCanEdited(4);
    m_plistTH->SetSubItemCanEdited(5);

    m_plistTH->Invalidate(false);
    return true;
}
bool CListCtrlPop::Create(CWnd* parent)
{
    bool result = CDialog::Create(IDD,parent);
    this->ShowWindow(SW_HIDE);
    this->InitListCtrl();
    this->GetClientRect(&this->m_rectShow);   
    return true;
}
  还有哪些类,你帮我分析一下
怎样查它CListCtrl::GetHead();被二次封装过
CListCtrl*     m_listctrl;//这是一个指针,怎样找它实例化
void CListCtrlPop::ClearListAllColumn()
{
    this->m_listctrl->DeleteAllItems();
    int n=m_listctrl->GetHeaderCtrl()->GetItemCount();
    for(int i=n-1;i>=0;i--)   
    this->m_listctrl->DeleteColumn(i);
}

在调试中只有到出错的信息:
_AFXCOLL_INLINE CString& CStringList::GetHead()
    { ASSERT(m_pNodeHead != NULL);//调试到这里是点击重试才到这里
        return m_pNodeHead->data; }
到这里时,按F11就进入汇编代码:
0041E640   push        ebp
0041E641   mov         ebp,esp
0041E643   push        0FFh
0041E645   push        424DF8h
0041E64A   push        41E840h
0041E64F   mov         eax,fs:[00000000]
0041E655   push        eax
0041E656   mov         dword ptr fs:[0],esp
0041E65D   add         esp,94h
0041E660   push        ebx
0041E661   push        esi
0041E662   push        edi
0041E663   mov         dword ptr [ebp-18h],esp
0041E666   mov         dword ptr [ebp-4],0
0041E66D   push        2
0041E66F   call        dword ptr ds:[422880h]
0041E675   add         esp,4
0041E678   mov         dword ptr ds:[42C030h],0FFFFFFFFh
0041E682   mov         eax,[0042C030]
0041E687   mov         [0042C034],eax
0041E68C   call        dword ptr ds:[422890h]
0041E692   mov         ecx,dword ptr ds:[42C014h]

[ 本帖最后由 fwherr 于 2015-1-19 15:10 编辑 ]
2015-01-19 14:04
快速回复:Debug Assertion failed! 这是什么错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018983 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved