1

代码(简化版)

(部分)类定义:

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我希望data1-indexed 以简化一些操作。

在全球范围内:

int k;
foo bar;

main功能上:

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

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

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

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

PS 不要指责我将任何东西放在全球范围内或向班级成员提供公共访问权限。我不是在写任何“真正的”程序,因为我只是在为编程比赛练习。

4

2 回答 2

5

经过很长时间的调试,我很有信心问题出在resize

几乎可以肯定的是:

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

与内存相关的错误的问题是,在错误代码造成损害之前,它们可能完全没有症状。

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

于 2013-03-13T07:34:35.697 回答
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;
}
于 2013-03-13T07:46:56.587 回答