Compression ZStd。解压后的堆损坏

Compression ZStd。解压后的堆损坏,compression,zstd,zstandard,Compression,Zstd,Zstandard,在大多数情况下,它工作得很好。例如,我压缩三维网格。几乎所有型号的压缩\解压缩效果都很好。但当程序尝试解压时,2或3个模型可能会给出错误。解压很好,但释放内存时出错 //如何读取文件 u8*压缩_v=空PTR; u8*压缩_i=nullptr; 如果(!meshhead.m_datacompresssize_i) { YY_打印_失败; 返回空ptr; } 如果(!meshhead.m_datacompresssize_v) { YY_打印_失败; 返回空ptr; } 压缩_v=(u8*)yyM

在大多数情况下,它工作得很好。例如,我压缩三维网格。几乎所有型号的压缩\解压缩效果都很好。但当程序尝试解压时,2或3个模型可能会给出错误。解压很好,但释放内存时出错

//如何读取文件
u8*压缩_v=空PTR;
u8*压缩_i=nullptr;
如果(!meshhead.m_datacompresssize_i)
{
YY_打印_失败;
返回空ptr;
}
如果(!meshhead.m_datacompresssize_v)
{
YY_打印_失败;
返回空ptr;
}
压缩_v=(u8*)yyMemAlloc(meshhead.m_数据压缩大小_v);
压缩_i=(u8*)yyMemAlloc(meshhead.m_datacompresssize_i);
in.read((char*)compressed_v,meshhead.m_datacompresssize_v);
in.read((char*)compressed_i,meshhead.m_datacompresssize_i);
u32超大=0;
new_mesh.m_data->m_texts=yyDecompressData(compressed_v,meshhead.m_datacompresssize_v,outsize,yyCompressType::ZStd);
new_mesh.m_data->m_index=(u8*)YY解压缩数据(compressed_i,meshhead.m_DataCompressSize_i,outsize,yyCompressType::ZStd);
...
yyMemFree(压缩_v);
yyMemFree(压缩_i);//这里出错
yyMemAlloc
yyMemFree
它只是
malloc
free
来自
mylib.dll

现在是ZStd代码。请查收

u8*引擎::压缩数据(u8*输入数据、u32输入数据、u32输出数据)
{
u8*输出数据=(u8*)yyMemAlloc(输入数据大小);//malloc
如果(!out_数据)
{
YY_打印_失败;
返回空ptr;
}
自动压缩绑定=ZSTD\u压缩绑定(数据大小);
size_t const cSize=ZSTD_compressCCtx(m_cctx,out_数据,compressBound,in_数据,in_数据大小,1);
if(ZSTD_isError(cSize))
{
yyMemFree(out_data);//自由
返回空ptr;
}
//YYMEMREALOC(out_data,(u32)cSize);//这会产生错误,所以我删除了它
输出数据大小=(u32)cSize;
返回_数据;
}
u8*引擎::解压缩数据(u8*输入数据、u32输入数据、u32输出数据)
{
无符号long long const rSize=ZSTD_getFrameContentSize(in_data,in_data_size);
u8*输出数据=(u8*)yyMemAlloc((u32)rSize);
如果(!out_数据)
{
YY_打印_失败;
返回空ptr;
}
size_t const dSize=ZSTD_解压(out_data,(size_t)rSize、in_data、in_data_size);
输出数据大小=(u32)数据大小;
返回_数据;
}
或者也许ZStd代码很好,但问题出在其他地方


它看起来像是
yyMemAlloc
yyMemFree
中的问题,但它只是
malloc
free
,我在不同的模块(.exe和many.dll)中到处使用它,一切正常。

如果
in_data
是不可压缩的,它将需要比
in_data\u size
更大的数据来表示

实际最坏情况是通过以下方式计算的,即值
compressBound


因此,为
out\u数据分配
compressBound
字节,而不是
in\u data\u size

您确定
rSize
返回有效值吗?