释放字符指针会返回错误

时间:2012-11-17 22:54:12

标签: c pointers memory-management malloc

我试图在使用它后释放一个字符指针,但它返回一个奇怪的错误。

错误说:

  

_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 个答案:

答案 0 :(得分:1)

sprintf()的调用正在写一个结尾(因为它附加一个NULL终止符),因为_scprintf()的返回值不包含NULL终止符。来自_scprintf()参考页:

  

返回使用指定的格式代码打印字符串或将其发送到文件或缓冲区时将生成的字符数。 返回的值不包括终止空字符。

这意味着程序具有未定义的行为。要将+ 1更正为_scprintf()的返回值。