逐行读取套接字但出现内存问题

Read Socket Line By Line but Memory Issue Occurs

我实现了一个HTTP客户端,它可以通过指定主机名和端口接收内容,并从套接字逐行显示。下面是我读一行的函数:

char* getLine(int fd)//fd is the socket number created before
{
    char c, pre;
    char* line = 0; 
    int size = 0;
    while(read(fd, &c, 1)!=0)
    {
        line = realloc(line, ++size);//read a new char so re-allocation
        line[size - 1] = c;

        if(pre == '\r' && c == '\n')//this is a new line
        {
            break;
        }
        pre = c;

    }
    if(line)
    {
        line = realloc(line, ++size);
        line[size - 1] = 0;//add a [=10=] at the end of line
    }
    return line;
}

下面是我在 main 函数中如何使用这个函数(假设 sockfd 已经创建并且请求已经发送到服务器)

char* line;
while((line = getLine(sockfd)) != NULL)
{
    printf("%s", line);
    if(!strcmp(line, "\r\n"))//blank line
        printf("#####Now reading body.\n");

    free(line);
}

问题是,当我尝试从一些短页面(例如 google.com 或 yahoo.com 获取内容时,它工作正常。但是,如果我想尝试一些长页,例如www.stanford.edu,它显示realloc(): invalid next size: 0x0000000000c794b0 ***

看来我的指针在那个getLine函数中有一些未定义的行为,但我真的不知道问题出在哪里。谁能给我一些提示?谢谢!

**问题已解决,因此源代码已被删除。

您在 createQuery() 中分配的缓冲区太小。

计算的长度不考虑 HTTP_VERSION,也不考虑终止 \0 字节。结果是内存损坏和未定义的行为。