1

コード(簡易版)

(の一部) クラス定義:

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

一部の操作を簡素化するために、 を 1 インデックスにしa+1たいからです。data

グローバル スコープ:

int k;
foo bar;

main関数内:

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

関数の後半で、にアクセスするmain別のメンバー関数 ( 内) への呼び出しがあり、 ( )が発生します。foodatasegmentation faultsegsegv

data.size()デバッグ後、が 0 を返すことがわかりました。これは非常に予想外です。

非常に長いデバッグセッションの後、私は問題がresizeing にあることに非常に確信を持っています。

PSグローバルスコープに何かを入れたり、クラスメンバーにパブリックアクセスを与えたりしたことで私を非難しないでください。プログラミング競技会の練習をしているだけなので、「本物の」プログラムを書いているわけではありません。

4

2 に答える 2

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 に答える