以最小的代价把 vec<(u8,u8,u8,u8)> 转化为 vec<vec<u8,u8,u8,u8>>, 内存释放时, 遇到: free(): invalid pointer, 有大佬看看吗?
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=35b37959ff4666c34b00d8b1dcdc0dfe
1
共 2 条评论, 1 页
评论区
写评论不好意思这么久才回复, 最近忙于工作
我这个描述也是有点不太恰当, 我本来是想: 把 vec 这样的数据 转换到 vec<vec<u8,u8,u8,u8>> 这样的数据类型, 如何最快速的实现, 尽量复用数据, 根据我在 Playground 中方法二的实现, 遇到一个问题是: free(): invalid pointer
今天我发现了问题, drop时,会尝试释放vec<vec<u8,u8,u8,u8>>, 但这个内存中的数据是从 vec中leak出来的, 现在会 drop多次 vec内存块中不同的地方, 这在第一个首地址时 是成功的, 但是 下一个地址 偏移了4个字节, 就会失败, 然后我也测试了下, 只能drop首地址, drop这个内存块上的其它地址都会失败, 地址都是无效
这样看起来 我的想法是很难实现了
--
👇
Pikachu: 我想先确认一下,你真的打算对tuple做unsafe操作吗?tuple的内存布局是没有任何保证的,rust编译器可以随意重排字段来进行优化。
相关参考链接:
我想先确认一下,你真的打算对tuple做unsafe操作吗?tuple的内存布局是没有任何保证的,rust编译器可以随意重排字段来进行优化。
相关参考链接: