2012-12-18 266 views
0

我不斷收到一個調試斷言失敗的錯誤,我找不出原因。我得到這個時候代碼運行錯誤:調試斷言失敗

​​

有時錯誤不會發生,直到後,我使用該代碼多次,有時我明白了,我第一次使用它。我真的不知道爲什麼我得到這個,我不知道如何解決它。所以如果任何人都可以幫助,我會感激。

代碼中我不斷收到的錯誤是: enter image description here

+0

if語句中的每行代碼都有一個錯誤。請考慮使用System :: Net :: Socket,這樣您就不必回退到C和C++代碼的混合。 –

回答

1

這是不正確的:

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()所以不能評論它的用途。