[英]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.