簡體   English   中英

調試斷言失敗

[英]debug assertion failed

我一直收到調試斷言失敗的錯誤,但我不知道為什么。 運行此代碼時出現錯誤:

     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();
             }
         }
     }

有時直到我多次使用該代碼后才會出現該錯誤,有時我是第一次使用它。 我真的不知道為什么得到這個,而且我不知道如何解決它。 因此,如果有人可以提供幫助,我將不勝感激。

我在該代碼期間不斷遇到的錯誤是: 在此處輸入圖片說明

這是不正確的:

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的字符strMESSAGE 使用length()代替。

send()的調用還將嘗試從MESSAGE訪問256字符,該字符可能大於為MESSAGE分配的字符,從而導致它不應訪問的內存。

我不確定為什么send()調用不簡單:

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

避免任何動態內存分配或復制。

只是要注意,我不熟悉MarshalString()因此無法評論其用法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM