2013-05-17 2 views
0

사용자가 입력 한 "gen"입력을 기반으로 많은 데이터 구조를 만들려고합니다.왜 seg 오류가 발생하는지 알고 싶습니다.

#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

사용자가 입력 한 세대의 번호입니다. 그때 내가 그런 것 같아요. – Tuffy

+0

생성 세대의 여러 구조를 어떻게 만듭니 까? – Tuffy

+1

이 줄'세대 이동. push_back (rootset :: generations());'down'은'for' 루프 안에 포함되어 있습니다. –

관련 문제