小编Azy*_*rod的帖子

std::vector.data() 在指针向量上是否以 null 终止?

我在我的 C++ 应用程序中使用 C 库。其中一项功能需要一个null-terminated array of pointers.

由于我使用的是 C++,因此我将数组的元素存储在std::vector.

data()我想知道简单地调用我的向量并将结果传递给库函数是否安全。

示例:

std::vector<struct A *> vec;

//library_function(struct A **array);
library_function(vec.data());
Run Code Online (Sandbox Code Playgroud)

当然,如果我更改向量中的元素,则返回的指针data()将无效,但这不是这里的问题(我可以在更新向量时再次调用该函数)。

我只是担心这可能是未定义的行为,因为我看不到任何提到的data()由空指针而不是随机垃圾终止的地方。

标准确实说:

const T* data() const noexcept;

Returns pointer to the underlying array serving as element storage.
The pointer is such that range [data(); data() + size()) is always a valid range
Run Code Online (Sandbox Code Playgroud)

因此存在一个终止元素,但它没有说明该元素是否已初始化以及如果已初始化,则具有什么值。

是否在其他地方指定了我错过的?
或者我是否必须自己分配一个原始数组并以 null 终止它?

c++ std stdvector undefined-behavior

0
推荐指数
1
解决办法
728
查看次数

标签 统计

c++ ×1

std ×1

stdvector ×1

undefined-behavior ×1