0

ユーザーが入力した「gen」という入力に基づいて多くのデータ構造を作成しようとしているこのコードがあります。コードは次のとおりです。

#include <iostream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <limits>
#include <stdio.h>
#include <sstream>


using namespace std;
using std::stringstream;
struct rootset {
  double totSize;
  const char *rStrtPtr;
  const char *rEndPtr;

  struct generations {
    double totSize;
    const char *genStrtPtr;
    const char *genEndPtr; 
    int numOfGen;
    string genName;

    struct object {
      double objSize;
      const char *objStrtPtr;
      const char *objEndPtr;
      string id;
      char markBit;
      char objPtr;


      struct freeList {
    double freeSpace;
    int flNumb; 
      };
    };
  };
};

int main()
{

  int gen =0;
  cin >> gen;
  cin >> pmemSize;

  vector<rootset> pRootSet;
  pRootSet.push_back(rootset());
  pRootSet[0].totSize = pmemSize;

   vector <rootset::generations> generation;
   generation.push_back(rootset::generations());

  for( i=0; i<gen; i++) {
    stringstream out;
    out << i;
   string s = out.str();
   generation[i].genName = "generation" + s
   cout<<"gen name: "<<generation[i].genName<<endl;

  }
}

このコードは印刷しています:

3
50
gen name: generation0
Segmentation fault (core dumped)

しかし、私の出力では、作成したい:

gen name: generation0
gen name: generation1
gen name: generation2
gen name: generation3

私のコードの何が問題なのか教えてください

4

1 に答える 1

1

範囲外にアクセスしているようですgeneration。ループに入るまでのサイズは 1 であるため、ループはgen0 または 1 に等しい場合にのみ機能します。

vector <rootset::generations> generation;
generation.push_back(rootset::generations()); // size = 1

for( i=0; i<gen; i++) {
  ...
  generation[i].genName = "generation" + s         // what is i?
  cout<<"gen name: "<<generation[i].genName<<endl; //  what is i?
于 2013-05-17T05:54:00.907 に答える