Debug Assertion Failed! File:wincore.cpp Line:365求大神帮帮忙呀,我没多少分,以后有分补上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Debug Assertion Failed! File:wincore.cpp Line:365求大神帮帮忙呀,我没多少分,以后有分补上相关的知识,希望对你有一定的参考价值。

我写一个聊天程序。
下面是主动发起聊天
//聊天线程
char thread_param[60]=0;
sprintf(thread_param,"%s\n%s",UserName,DestUser);
HANDLE chat_Thread;
chat_Thread=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ChatProc,(LPVOID)thread_param,0,NULL);
CloseHandle(chat_Thread);

DWORD WINAPI CQQDlg::ChatProc(LPVOID lpParam)

char *thread_param=(char *)lpParam;
char DestUser[30]=0,UserName[30]=0;
unsigned int i=0;
for(i;i<strlen(thread_param);i++)

if(thread_param[i]=='\n')break;
UserName[i]=thread_param[i];

strcpy(DestUser,&thread_param[i+1]);
CChatDlg chatdlg;//聊天窗口
ChatConn conninfo;//连接信息

strcpy(conninfo.user,UserName);
strcpy(conninfo.destuser,DestUser);
conninfo.chatdlg=&chatdlg;

HANDLE getmsg_Thread;
getmsg_Thread=::CreateThread(NULL,0,GetChatMsgProc,(LPVOID)&conninfo,0,NULL);
CloseHandle(getmsg_Thread);

chatdlg.SetTitle(UserName,DestUser);
Sleep(2000);
chatdlg.DoModal();

char sqqueue[50]=0;
char content[60]=0;
CMsgManage closechat;
sprintf(sqqueue,"sq%s",UserName);
sprintf(content,"%c%s\n%s",ACTION_CLOSECHAT,UserName,DestUser);
closechat.Conn_toTlq();
closechat.SendMsg(sqqueue,BUF_MSG,content);
closechat.DisConn_toTlq();
CMakeConn chatdisconn(UserName,DestUser);
chatdisconn.Conn_TLQ();
chatdisconn.DelrqQueue("buf");
chatdisconn.DellqQueue("buf");
chatdisconn.DisConn_TLQ();
return TRUE;


DWORD WINAPI CQQDlg::GetChatMsgProc(LPVOID lpParameter)

ChatConn *show_chat=(ChatConn *)lpParameter;
char lqqueue[50]=0;
sprintf(lqqueue,"lq%sbuf%s",show_chat->destuser,show_chat->user);
CMsgManage getMsg;
getMsg.Conn_toTlq();
while(!::close_chatdlg)

getMsg.GetMsg(lqqueue,-1);//循环获取消息
if (strcmp(getMsg.uMsg.UsrContext,"")!=0)

show_chat->chatdlg->SetShow(getMsg.uMsg.UsrContext);


getMsg.DisConn_toTlq();

return 0;


运行的时候双方都可以聊天,但是当我多次移动聊天窗口就会产生
Debug Assertion Failed! File:wincore.cpp Line:365

继续可以聊天,因为两个聊天窗口可以被选中,而报错一方的好友界面不能被选中了
然后多次用其他页面覆盖聊天窗口时又另一个用户也弹出Debug Assertion Failed! File:wincore.cpp Line:365
主要关心线程与对话框的关系

参考技术A 报错时点“中断”进入调试状态,打开“调用堆栈”窗口,查看最近执行的一行代码(是你的代码,不是vc的),然后分析问题,分析不了就贴出来追问

你这个回答我看见别人回答过哦,我没法贴图,你QQ多少我发给你看看

追答

9020905

图片不显示,关闭时出错 --> Debug Assertion Failed!表达式:is_block_type_valid(header->_block_use)

【中文标题】图片不显示,关闭时出错 --> Debug Assertion Failed!表达式:is_block_type_valid(header->_block_use)【英文标题】:the picture is not displayed and an error occurs when turning off --> Debug Assertion Failed! Expression: is_block_type_valid(header->_block_use) 【发布时间】:2020-01-04 23:14:53 【问题描述】:

图片未显示,当我关闭时,出现错误。想不通,可能是指针的问题。

*** 正在询问详细信息,但我没有更多详细信息 - 抱歉。 *** 正在询问详细信息,但我没有更多详细信息 - 抱歉。 *** 正在询问详细信息,但我没有更多详细信息 - 抱歉。 *** 正在询问详细信息,但我没有更多详细信息 - 抱歉。 *** 正在询问详细信息,但我没有更多详细信息 - 抱歉。

Menu.h

#include "Picture.h"

class menu

    const int menuPictCount;
    picture* menuPicture[];
public:
    menu(sf::RenderWindow& usableArea);
    ~menu();
    void draw();
    void posСorrection();
    void shineButton(sf::Color color);
;


Menu.cpp


menu::menu(sf::RenderWindow& usableArea) : menuPictCount(4)

    this->menuPicture[this->menuPictCount];

    //background
    this->menuPicture[0] = new picture(usableArea, "image/background/0.png");

    //buttons
    this->menuPicture[1] = new picture(usableArea, "image/menu/newgame.png");
    this->menuPicture[1] = new picture(usableArea, "image/menu/continue.png");
    this->menuPicture[3] = new picture(usableArea, "image/menu/exit.png");

menu::~menu()

    for (size_t i = 0; i < this->menuPictCount; i++) delete this->menuPicture[i];
    delete[] menuPicture;

void menu::draw()

    for (size_t i = 0; i < this->menuPictCount; i++) this->menuPicture[i]->draw();

void menu::posСorrection()

    const int buttonsCount = this->menuPictCount - 1;

    if (buttonsCount % 2 == 0)
    
        int indexCenterOver = buttonsCount / 2;
        int indexCenterUnder = indexCenterOver + 1;
        this->menuPicture[indexCenterOver]->putCenterOver();
        this->menuPicture[indexCenterUnder]->putCenterUnder();

        for (size_t i = indexCenterOver - 1; i > 0; i--)
        
            this->menuPicture[i]->putOverObj(*this->menuPicture[i + 1]);
        
        for (size_t i = indexCenterUnder + 1; i <= buttonsCount; i++)
        
            this->menuPicture[i]->putUnderObj(*this->menuPicture[i - 1]);
        
    
    else
    
        const int indexCenter = buttonsCount / 2 + 1;

        this->menuPicture[indexCenter]->putCenter();

        for (size_t i = indexCenter - 1; i > 0; i--)
        
            this->menuPicture[i]->putOverObj(*this->menuPicture[i + 1]);
        
        for (size_t i = indexCenter + 1; i <= buttonsCount; i++)
        
            this->menuPicture[i]->putUnderObj(*this->menuPicture[i - 1]);
        
    

void menu::shineButton(sf::Color color)

    /*for (size_t i = 0; i <= this->buttons.GetCount(); i++)
    
        if (this->buttons.GetElement(i)->data.trackContainsCursor())
            if (this->buttons.GetElement(i)->data.getColor() != color)
            
                this->buttons.GetElement(i)->data.setColor(color);
            
        if (!this->buttons.GetElement(i)->data.trackContainsCursor())
            if (this->buttons.GetElement(i)->data.getColor() == color)
            
                this->buttons.GetElement(i)->data.setColor(color);
            
    */
 ```


  [1]: https://i.stack.imgur.com/uNY8B.png

【问题讨论】:

this-&gt;menuPicture[this-&gt;menuPictCount]; 不分配任何空间。它根本没有做任何事情。 但是如果我只需要在构造函数实现中初始化数组呢? 你没有数组,你有一个指向图片的指针。您需要为其分配空间(使用new)。更好的是,摆脱原始指针并改用智能指针和标准容器。 注意:delete[] menuPicture; 只删除了指针数组。它没有delete 动态分配并放置在数组中的对象。重要提示:这里不需要动态分配任何东西。你知道menuPicture 的大小是4,你可以使用pictures 或std::array 的普通旧数组。蓝精灵这个。我要写一个非答案。 没关系 看起来 chwala 正在报道这个。 【参考方案1】:

代替

picture* menuPicture[];

使用

std::vector&lt;std::unique_ptr&lt;picture&gt;&gt; menuPicture;

并且在menu 构造函数中而不是这样做:

this-&gt;menuPicture[this-&gt;menuPictCount];

这样做:

this-&gt;menuPicture.resize(this-&gt;menuPictCount);

编辑: 当然也从析构函数中删除deletes。 std::vectorstd::unique_ptr 会自行清理。

如果菜单中的图片数量是恒定的(就像在您的构造函数中一样),您可以将 menuPicture 声明更改为:

std::array&lt;std::unique_ptr&lt;picture&gt;, 4&gt; menuPicture;

但是你不能在它上面调用resize。

【讨论】:

以上是关于Debug Assertion Failed! File:wincore.cpp Line:365求大神帮帮忙呀,我没多少分,以后有分补上的主要内容,如果未能解决你的问题,请参考以下文章

debug assertion failed winocc.cpp line:138 好不容易下载到一个程序,不能打开,大大们帮我一下吧!急!

如何在 Visual Studio 中跳过 Debug Assertion Failed 并直接中断

debug assertion failed!是啥问题?高分求助

vc++ 调试时出现Debug Assertion Failed!该怎么办?

opencv检错:程序运行过程正常,当跳出函数时出现断言错误(Debug Assertion Failed)

用Microsoft Visual Studio 2010编译下面这个程序总是提示Debug Assertion Failed