gpt4 book ai didi

c++ - 调试断言失败

转载 作者:行者123 更新时间:2023-11-28 07:50:21 24 4
gpt4 key购买 nike

我一直收到调试断言失败的错误,我不知道为什么。运行此代码时出现错误:

     private: System::Void txtMessage_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^  e) {
if(e->KeyCode == Keys::Enter && txtMessage->Text != ""){

char* MESSAGE = new char[txtMessage->Text->Length];
ZeroMemory(MESSAGE, sizeof(MESSAGE));

string strMESSAGE = "";

MarshalString(txtMessage->Text, strMESSAGE);
memcpy(MESSAGE, strMESSAGE.c_str(), sizeof(strMESSAGE));

if (send(sConnect, MESSAGE, 256, NULL) != SOCKET_ERROR){
txtMessage->Clear();
}
}
}

有时直到我多次使用该代码后才会出现错误,有时我在第一次使用它时就得到了它。我真的不知道为什么我会得到这个,而且我不知道如何解决它。因此,如果有人可以提供帮助,我将不胜感激。

我在该代码中不断遇到的错误是: enter image description here

最佳答案

这是不正确的:

char* MESSAGE = new char[txtMessage->Text->Length];
ZeroMemory(MESSAGE, sizeof(MESSAGE));

因为它只会将 sizeof(char*) 字节而不是预期的 Length 归零。

MESSAGE的分配也是基于txtMessage,但是是从strMessage写入的。可能是这些字符串对象的长度不相等,可能导致分配的内存不足。

memcpy() 的使用也不正确:

memcpy(MESSAGE, strMESSAGE.c_str(), sizeof(strMESSAGE));

因为 sizeof(strMESSAGE) 不是 strMESSAGE 中的字符数。请改用 length()

send() 的调用也将尝试访问 MESSAGE 中的 256 个字符,这可能比为 分配的字符更大>MESSAGE 导致访问不应访问的内存。

我不确定为什么调用 send() 不是简单的:

if (send(sConnect,strMESSAGE.c_str(),strMESSAGE.length(), NULL) != SOCKET_ERROR){

避免任何动态内存分配或复制。

请注意,我不熟悉 MarshalString(),因此无法评论它的使用。

关于c++ - 调试断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13940086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com