gpt4 book ai didi

c++ - 初始化空 std::vector C++ 时出现段错误

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

我正在尝试使用这样的 vector 数组:

vector<foo*> *vec = new vector<foo*>(n);

vec 的某些位置将是空的,其中一些稍后会填充一些数据:

vec[i].push_back(&foo_var);

我的问题是 vec 的空位置。假设 i 等于 0,我没有push_back 任何东西。然后,当我尝试做一些检查时,例如,

vec[0].size();

程序返回了一个巨大的数字 1457283635,而不是预期的返回值 0

四处寻找,我发现我应该已经初始化了空位置。然后我试试这个:

vector<foo*> vec = new vector<for*>(n);
for(int i = 0; i < n; i++) {
vec[i] = vector<foo*>();
}
...

这个“解决方案”足以使我的程序按预期运行(例如,返回 0 作为空位置的大小)。

但是,在增加 n 的大小之后,我的程序现在在这一行崩溃了:

vec[i] = vector<foo*>();

程序发送一个段错误。

  • 有人可以解释一下发生了什么吗?
  • 我应该如何处理这个具体案例?
  • 在这种情况下, vector 初始化的最佳做法是什么?

最佳答案

看来你的意思是

vector<foo*> *vec = new vector<foo*>[n];

代替

vector<foo*> *vec = new vector<foo*>(n);

第一个确实在动态内存中分配了一个 vector 数组,而第二个分配了一个包含 n 个元素的 vector 。考虑到您可以定义 vector 的 vector 。例如

std::vector<std::vector<foo *>> vec( n );

关于c++ - 初始化空 std::vector C++ 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28885327/

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