0

好吧,所以,这是一个很奇怪的。

我使用 malloc 在 C 中动态分配内存,然后调用在我链接的库中定义的方法。

我遇到的问题是调用该方法后无法释放内存,但是如果我在调用该方法之前释放它就可以了。

代码:

unsigned char* pData = (unsigned char*)malloc(sizeof(unsigned char)*(sLen + 1));
pData[0] = CRITICAL_ERROR; // defined as 2
memcpy(pData+1, pBuf, sLen);
libwebsocket_write(pLws, pData, sLen + 1, LWS_WRITE_BINARY);
free(pData);

当我调用free(pData).

我已经尝试针对与我的应用程序相同的操作系统、架构和构建配置(发布)编译库,但它不起作用。

编辑:我只是比较了 libwebsocket_write 调用前后的指针地址,结果是一样的。

4

1 回答 1

2

您可以查看文档,其中指出:

buf,要发送的数据。对于在 websocket 连接上发送的数据(即,不是默认的 http),此缓冲区必须在指针之前具有有效的 LWS_SEND_BUFFER_PRE_PADDING 字节,并且在 (buf + len) 之后的缓冲区中有效的附加 LWS_SEND_BUFFER_POST_PADDING 字节。这样就可以就地添加协议头和尾数据。

您不提供此填充。函数调用更改了保存分配缓冲区内部大小的指针之前的堆内存,然后释放失败。

于 2014-09-26T09:45:29.133 回答