2016-11-30 59 views
0

我正試圖編寫一個程序,其中在循環的每個步驟中,我創建了一個表示隨時間變化的圖形的鄰接表。 下面的代碼:覆蓋向量<vector<>>和分段錯誤

#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); 
     } 
    } 
} 
} 

但是在某些時候,我得到段錯誤。事實上,我認爲這可能不是覆蓋矢量的正確方法。我還補充說我想在每一步中改變N_nodes。任何幫助表示讚賞!

+0

您正在創建向量的新載體*通過循環*每次。我不明白這對你有什麼好處。顯然'N_nodes'有同樣的問題。也許你應該在更高的範圍內聲明這些變量,比如循環的*外*。 –

+0

問題出在您未發佈的代碼中。 – molbdnilo

+0

歡迎使用堆棧溢出,請閱讀[this](http://stackoverflow.com/help/mcve)以瞭解如何發佈最小和完整的示例 – UKMonkey

回答

-2

對於分段錯誤部分,您可以使用Valgrind來嘗試找出代碼中的哪些操作正在寫入無效位置。

你也可以趕上Segmantation故障,使用信號的,但它不是一個好的做法,以趕上分段故障

相關問題