RtlFreeHeap在将指针传递给外部库方法后释放内存时的地址无效

时间:2014-09-26 09:35:42

标签: c pointers memory dynamic segments

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

我正在使用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)时,会抛出未处理的异常。

我尝试使用与我的应用程序相同的操作系统,arch和构建配置(Release)来编译库,但它不起作用。

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

1 个答案:

答案 0 :(得分:2)

您可以查看documentation,其中说明:

buf ,要发送的数据。对于在websocket连接上发送的数据(即,不是默认的http),此缓冲区必须在指针之前有效LWS_SEND_BUFFER_PRE_PADDING字节,并且在(buf + len)之后缓冲区中有一个额外的LWS_SEND_BUFFER_POST_PADDING字节有效。这样就可以在原位添加协议标题和预告片数据。

您不提供此填充。保存mallocated缓冲区内部大小的指针之前的堆内存正由函数调用更改,然后自由失败。