gpt4 book ai didi

C套接字仅使用二进制数据造成内存泄漏

转载 作者:行者123 更新时间:2023-11-30 15:46:46 25 4
gpt4 key购买 nike

我正在编写一个 Web 代理,它可以很好地处理可以转换为 ASCII 文本的网页。然而,当我尝试查看带有二进制数据的页面(Youtube.com 是我一直在使用的页面)时,某个地方存在内存泄漏,并且相同的几个字符将在我的字符串末尾一遍又一遍地重复。正在发送给客户(并且会出现在显然不应该出现的其他地方)。

下面是我的代码的相关部分。 SendHTTPResponse 是一个使用代理将网页的响应发送到客户端的函数,并且工作正常。

有人有见解吗?

int numBytes;  
char temp[3000];
memset(temp, '\0', 3000);
numBytes = Read(internetSocket, temp, 2999);
while (errno = 0, numBytes > 0 || errno == EINTR)
{
SendHTTPResponse(socket, temp, numBytes);
memset(temp, '\0', 3000);
numBytes = Read(internetSocket, temp, 2999);
}

最佳答案

回答你的问题,这段代码中没有内存泄漏。

也没有理由认为内存泄漏与此问题有任何关系。

但是你的代码是错误的。它不应该设置 errno ,也不应该测试它,除非该方法返回 -1。它应该是:

while ((numBytes = Read(socket, temp, sizeof temp)) > 0 || numBytes == -1 && errno == EINTR)
{
SendHTTPResponse(socket, temp, numBytes);
}

您不需要 memset() 调用,也不需要为尾随 null 留出任何空间,前提是 SendHTTPResponse() 正确注意到你通过它的长度。它本身当然不应该寻找尾随空值。

而 3000 是一个非常奇怪的缓冲区大小。我自己会使用 8192。

关于C套接字仅使用二进制数据造成内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18049041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com