0
我不斷收到一個調試斷言失敗的錯誤,我找不出原因。我得到這個時候代碼運行錯誤:調試斷言失敗
有時錯誤不會發生,直到後,我使用該代碼多次,有時我明白了,我第一次使用它。我真的不知道爲什麼我得到這個,我不知道如何解決它。所以如果任何人都可以幫助,我會感激。
代碼中我不斷收到的錯誤是:
我不斷收到一個調試斷言失敗的錯誤,我找不出原因。我得到這個時候代碼運行錯誤:調試斷言失敗
有時錯誤不會發生,直到後,我使用該代碼多次,有時我明白了,我第一次使用它。我真的不知道爲什麼我得到這個,我不知道如何解決它。所以如果任何人都可以幫助,我會感激。
代碼中我不斷收到的錯誤是:
這是不正確的:
char* MESSAGE = new char[txtMessage->Text->Length];
ZeroMemory(MESSAGE, sizeof(MESSAGE));
,因爲它只會zeroise 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()
所以不能評論它的用途。
if語句中的每行代碼都有一個錯誤。請考慮使用System :: Net :: Socket,這樣您就不必回退到C和C++代碼的混合。 –