gpt4 book ai didi

c++ - 无法调整作为类成员变量的 C++ std::vector 的大小

转载 作者:行者123 更新时间:2023-11-30 00:53:50 25 4
gpt4 key购买 nike

代码(简化版)

(部分)类定义:

struct foo {
std::vector<int> data;
foo(int a=0):data(a+1,0) {}
void resize(int a) {
data.resize(a+1,0);
}
}

a+1部分是因为我希望data为1-indexed以简化一些操作。

在全局范围内:

int k;
foo bar;

main 函数中:

std::cin>>k;
bar.resize(k);

稍后在 main 函数中,调用另一个访问 data 的成员函数(在 foo 中),导致 段错误 (segsegv)。

调试后发现data.size()返回0,非常出乎意料。

经过很长时间的调试,我确信问题出在 resizeing 上,这应该不会造成任何问题(毕竟它来自标准库!)。

附言不要指责我将任何东西放在全局范围内或向类(class)成员提供公共(public)访问权限。我不是在编写任何“真正的”程序,因为我只是在为编程竞赛练习。

最佳答案

After a very long session of debugging, I feel very confident that the problem is with the resize

几乎可以肯定的是:

  1. 此问题与 resize() 无关。
  2. 您在某处存在与内存相关的错误(双重删除、未初始化/悬挂指针、缓冲区溢出等)。

与内存相关的 bug 的问题在于它们可能完全没有症状,直到 bug 代码造成损害之后很久。

我的建议是在 valgrind 下运行您的程序(或者至少向我们展示一个不适合您的 SSCCE)。

关于c++ - 无法调整作为类成员变量的 C++ std::vector 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15379215/

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