2012-11-17 78 views
0

我試圖在釋放字符指針後使用它,但它返回一個奇怪的錯誤。釋放字符指針返回錯誤

錯誤說:

_CrtDbgREport:字符串太長或IO錯誤

而編制本身不返回任何錯誤調試器。

的代碼目前看起來是這樣的:

void RespondToUser(SOCKET client, SOCKET server) 
{ 
    char buffer[80]; 
    char *temp = malloc(_scprintf("HTTP/1.1 200 OK\r\n%s\r\nServer: %s\r\nConnection: close\r\n\r\nHi!", buffer, SERVER_NAME)); 
    sprintf(temp, "HTTP/1.1 200 OK\r\n%s\r\nServer: %s\r\nConnection: close\r\n\r\nHi!", buffer, SERVER_NAME); 

    send(client, temp, strlen(temp), 0); 
    closesocket(client); 
    free(temp); 
    ListenToUsers(server); 
} 

的問題,只有當我試圖擺脫內存的溫度指針,而不是其他發生。什麼可能導致這種情況?

+1

除了hmjd寫的內容外,您還在讀取未初始化的「緩衝區」。 – user4815162342

回答

1

sprintf()呼叫正在寫一個過去的結束(因爲它附加一個NULL終止符),從_scprintf()返回值不包括空終止符。來自_scprintf()參考頁:

返回如果要使用指定的格式代碼打印或發送到文件或緩衝區的字符串,則會生成的字符數。 返回值不包括終止空字符。

這意味着程序有未定義的行爲。將+ 1更正爲_scprintf()的返回值。