gpt4 book ai didi

c++ - 调整指针段错误的 vector

转载 作者:行者123 更新时间:2023-11-30 04:26:14 26 4
gpt4 key购买 nike

我一直遇到这种我无法理解的奇怪的 std::vector 行为。

代码大概是这样

#include <iostream>
#include <vector>

class MyClass{
public:
MyClass():
v_(),
w_(init_w())
{};

~MyClass()
{};

std::vector<int*> init_w()
{
v_.resize(4096);
return v_;
};
private:
std::vector<int*> w_;
std::vector<int*> v_;
};

int main()
{
MyClass a;
}

运行它会在 resize 处给我一个错误的段错误。如果为 resize 选择了一个较低的值,代码可能根本不会出现段错误。

更新:问题在于,与初始化列表所指示的相反,w_v_ 之前被初始化。因此,在 init_w() 中,v_ 状态是未定义的。恢复声明中 v_w_ 的顺序可以解决问题。

最佳答案

The problem is that, contrary to what the initializer list indicates, w_ get initialized before v_

您推断是这样,但实际上并非如此。列表的顺序无关紧要;类中声明的顺序是。因此,如果您想查看成员实际上是如何初始化的,您的初始化列表应该模仿声明顺序。

我的问题是;你为什么要使用指针 vector 开始?您是否意识到您需要在对象超出范围或遭受内存泄漏之前删除列表中的每个元素?

关于c++ - 调整指针段错误的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675883/

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