我试图在使用字符指针后释放它,但它返回了一个奇怪的错误。
错误说:
_CrtDbgREport:字符串太长或 IO 错误
调试器本身在编译时不返回任何错误。
代码当前如下所示:
void RespondToUser(SOCKET client, SOCKET server)
{
char buffer[80];
char *temp = malloc(_scprintf("HTTP/1.1 200 OKrn%srnServer: %srnConnection: closernrnHi!", buffer, SERVER_NAME));
sprintf(temp, "HTTP/1.1 200 OKrn%srnServer: %srnConnection: closernrnHi!", buffer, SERVER_NAME);
send(client, temp, strlen(temp), 0);
closesocket(client);
free(temp);
ListenToUsers(server);
}
仅当我尝试从内存中释放临时指针时才会出现此问题,而不是其他情况。可能是什么原因造成的?
对 sprintf()
的调用是在末尾写入一个(因为它附加了一个 NULL 终止符),因为 _scprintf()
的返回值不包括 NULL 终止符。从_scprintf()
参考页面:
返回使用指定的格式代码打印字符串或将字符串发送到文件或缓冲区时将生成的字符数。返回的值不包括终止空字符。
这意味着程序具有未定义的行为。将+ 1
更正为_scprintf()
的返回值。