返回Vec缓冲区及其内部数据指针时,该指针是否有效?
结论:ptr是有效的
在你的代码场景中,ptr 完全有效,原因如下:
Vec::as_ptr()返回的指针指向Vec内部数据的起始地址,只要该Vec未被修改(未触发内存重新分配)且未被销毁,这个指针就始终有效。- 函数
foo中创建的buf被移动到main函数的_buf变量中,_buf会存活到main作用域结束,期间没有对_buf执行任何可能导致内存重新分配的操作(比如push、resize等),也不会被提前drop,因此ptr始终指向_buf的有效内存区域。
注意事项
- 若后续对
_buf执行了可能触发内存重新分配的操作,ptr会立即失效,因为Vec会将数据迁移到新的内存地址,原指针将变成悬垂指针。 - 绝对不能在
_buf被销毁(比如离开作用域)后再使用ptr,这会导致未定义行为。
内容的提问来源于stack exchange,提问作者rodrigocfd
相关产品推荐
相关产品推荐

