代码(简化版)
(部分)类定义:
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索引以简化某些操作。
在全球范围内:
int k;
foo bar;
<{1>}函数中的:
main
稍后在std::cin>>k;
bar.resize(k);
函数中,调用另一个访问main
的成员函数(foo
),导致data
{{1} })。
调试后,我发现segmentation fault
返回0.这是非常意外的。
经过一段很长的调试后,我对segsegv
问题非常有信心,这不应该导致任何问题(毕竟它来自标准库!)。
P.S。不要指责我将任何东西放在全球范围内或让公众可以访问班级成员。我不是在写任何“真正的”程序,因为我只是在参加编程比赛。
答案 0 :(得分:5)
经过一段很长的调试后,我对
的问题非常有信心resize
几乎可以肯定:
答案 1 :(得分:1)
以下对我来说没问题
#include <vector>
#include <cstdlib>
struct foo {
std::vector<int> data;
explicit foo(int a=0) : data(a+1, 0) {}
void resize(int a) {
data.resize(a+1, 0);
}
};
int main() {
foo test_foo(1);
for (size_t i = 0; i < 1000; ++i) {
int a = std::rand() % 65536;
test_foo.resize(a);
if (test_foo.data.size() != a + 1)
return 1;
}
return 0;
}