2016-11-30 7 views
0

Ich versuche, ein Programm zu schreiben, in dem ich bei jedem Schritt einer Schleife eine Adjazenzliste erstellen, die ein Diagramm darstellt, das sich in der Zeit ändert. Hier ist der Code:Überschreiben Vektor <vector<>> und Segmentierung Fehler

#include <iostream>            
#include <fstream>   
#include <string>   
#include <sstream>   
#include <vector>   
#include <math.h> 
#include <stdlib.h> 
#include <time.h> 
#include <algorithm>           
#include <boost/random/mersenne_twister.hpp>     
#include <boost/random/variate_generator.hpp>     
#include <boost/random/uniform_int.hpp>       
#include <boost/random/uniform_real.hpp> 
#include <boost/random/exponential_distribution.hpp> 

using namespace std; 
using std::vector; 

typedef boost::mt19937_64 ENG; // use Mersenne Twister 19937 as PRNG engine 
typedef boost::uniform_int<> DIST_INT; // define uniform distribution of integers 
typedef boost::uniform_real<> DIST_REAL; // define uniform distribution of reals on [0,1) 
typedef boost::exponential_distribution<> DIST_EXP; // define exponential distribution 
typedef boost::variate_generator<ENG,DIST_INT> VARIATE_INT; 
typedef boost::variate_generator<ENG,DIST_REAL> VARIATE_REAL; 
typedef boost::variate_generator<ENG,DIST_EXP> VARIATE_EXP; 

int main() 
{ 
const unsigned int random_seed = time(NULL); 
// ======= initialize BOOST machines 
ENG eng(random_seed); 
DIST_INT dist_int; 
DIST_REAL dist_rand(0,1); 
DIST_EXP dist_exp; 
VARIATE_INT randint(eng,dist_int); //random integer. use as: randint(N) 
VARIATE_REAL rand(eng,dist_rand); //random float on [0,1[. use as: rand() 
VARIATE_EXP randexp(eng,dist_exp); //random exponentially distributed float. 
int N = 500, Tmax=200000, v, w; 
float p = 0.2, s; 
vector<vector<int> > contact_list; 
for(int i = 0; i < 200000; i++) 
{ 
    contact_list.resize(N, vector<int>()); 
    v = 1; 
    w = -1; 
    while(v < N) 
    { 
     s = rand(); 
     w += 1 + int(log(1-s)/log(1-p)); 
     while((w >= v) && (v < N)) 
     { 
     w = w - v; 
     v += 1; 
     } 
     if (v < N) 
     { 
     contact_list[v].push_back(w); 
     contact_list[w].push_back(v); 
     } 
    } 
} 
} 

aber an einem gewissen Punkt, den ich Segmentierungsfehler bekommen. Tatsächlich denke ich, dass dies nicht der richtige Weg ist, um einen Vektor zu überschreiben. Ich füge auch hinzu, dass ich N_nodes bei jedem Schritt ändern möchte. Jede Hilfe wird geschätzt!

+0

Sie erstellen einen neuen Vektor von Vektoren * jedes Mal durch die Schleife * zu fangen. Ich sehe nicht, wie dir das gut tut. Offenbar hat 'N_nodes' das gleiche Problem. Vielleicht sollten Sie diese Variablen in einem höheren Bereich deklarieren, wie * außerhalb * der Schleife? –

+0

Das Problem ist irgendwo in dem Code, den Sie nicht gepostet haben. – molbdnilo

+0

Willkommen zum Stack-Überlauf, lesen Sie bitte [this] (http://Stackoverflow.com/help/mcve), um zu sehen, wie Sie ein minimales und vollständiges Beispiel veröffentlichen können. – UKMonkey

Antwort

-2

Für den Segmentationsfehler können Sie Valgrind verwenden, um herauszufinden, welche Operation in Ihrem Code an einem ungültigen Speicherort geschrieben wird.

Sie können auch Segmantation Fehler bei der Verwendung von Signal zu fangen, aber es ist keine gute Praxis einen Segmentation Fault

Verwandte Themen