2013-05-17 1 views
0

У меня есть этот код, где я пытаюсь создать много структур данных на основе введенного пользователем «gen». вот код:Хотите знать, почему я получаю seg fault

#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 

Пожалуйста, дайте мне знать, что случилось с мой код

+0

Пожалуйста, отправьте полную программу. Я не вижу тип 'pRootSet'. (предположим, что это 'std :: vector '. Также проверьте, если 'generation [i]' является допустимым индексом. – Mahesh

+0

попробуйте использовать отладчик, он расскажет вам немного больше о месте, где произошла ошибка seg. –

+0

made мои правки сожалеют об этом – Tuffy

ответ

1

Похоже, вы обращаетесь к generation за пределы. Он имеет размер 1 к моменту ввода петли, поэтому петля может работать только для gen, равной 0 или 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? 
+0

i - количество поколений, введенных пользователем. Я предполагаю, что мне тогда не разрешено делать это так. – Tuffy

+0

Как мне создать несколько структур поколений? – Tuffy

+1

просто переместите эту строку 'поколение. push_back (rootset :: generations()); 'down, поэтому он включен внутри цикла' for' –