gpt4 book ai didi

c++ - 调整 vector 大小并检索值,这是正确的还是在任何情况下都可能导致段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 14:39:00 25 4
gpt4 key购买 nike

如果您在下面的示例中看到我已将 vector 的大小调整为 3 并且我将指针 data1 存储在 data[5] 上,您认为这是一个问题吗除非我存储的记录不超过 3 条。

这绝对完美,但这是正确的方法吗?

#include<iostream>
#include <vector>

struct Data
{
int age;
int id;
};

int main()
{

std::cout<<"inside main"<<std::endl;

std::vector<Data*> data;

data.resize(3);
Data *data1 = new Data();
std::cout<<"after resize"<<std::endl;
data1-> age = 28;
data1-> id = 5592;
data[5] = data1;
std::cout<<"after populate = ";
std::cout<<data[5]->age<<std::endl;

return 0;

最佳答案

std::vector 不是一个稀疏容器,因为调用 data.resize(3) 允许您分配 3您选择的任何索引处的 vector 元素。 事实并非如此。

您只能分配给索引 0、1 和 2。您尝试访问 data[5] 时的行为是未定义

由于您的 C++ 运行时库可能为超过 3 个的元素分配空间,因此它似乎在这种情况下有效,作为避免内存碎片的有用优化。可能您可以通过查看 vector 的容量 来判断。但是永远不要将容量作为您可以访问的索引的上限。

关于c++ - 调整 vector 大小并检索值,这是正确的还是在任何情况下都可能导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com