无法调整c ++ std :: vector的大小,它是类的成员变量

The*_*vat 1 c++ vector segmentation-fault stdvector c++-standard-library

代码(简化版)

(部分)类定义:

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

a+1部分是因为我想要data1索引来简化一些操作.

在全球范围内:

int k;
foo bar;
Run Code Online (Sandbox Code Playgroud)

main功能:

std::cin>>k;
bar.resize(k);
Run Code Online (Sandbox Code Playgroud)

稍后在main函数中,调用另一个成员函数(in foo)访问data,导致a segmentation fault(segsegv).

调试后,我发现data.size()返回0.这是非常意外的.

调试的很长的会议结束后,我感到非常有信心,这个问题是与resizeING,这应该不会造成任何问题(这是从标准库,毕竟!).

PS不要指责我将任何东西放在全球范围内或让公众可以访问集体成员.我不是在写任何"真正的"程序,因为我只是在参加编程比赛.

NPE*_*NPE 5

经过一段很长的调试后,我对这个问题非常有信心 resize

几乎可以肯定的是:

  1. 这个问题没有任何关系resize().
  2. 你在某处有一个与内存相关的bug(双删除,未初始化/悬空指针,缓冲区溢出等).

与内存相关的错误的事情是,在错误代码完成损坏之后,它们可以完全无症状.

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

  • @TheemathasChirananthavat如果你有不同的问题,请坐一会儿,思考,测试,减少等.如果你无法解决它,发一个新问题,不要修改这个. (3认同)