igraph-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[igraph] segmentation fault(core dumped)


From: Yi Cao
Subject: [igraph] segmentation fault(core dumped)
Date: Fri, 1 Apr 2011 10:31:07 -0700

Hello everyone,
 
      I wrote a small program by C++ to calculate the component size distribution of one vertex set in a bipartite graph. It seems everything is ok, and the compile is ok, but it returns segmentation fault and core dumped when runing it. There must be some mistakes in the code, maybe very generral ones, but I really can not figure them out. Can someone help me go through it and give me some ideas? Thanks in advance. 
 
The code is :
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <igraph.h> 
#include<stdio.h>  
#include<iostream> 
#include<fstream> 
#define numberoflines 1077806
 
using namespace std;
 
int main(int argc, char *argv[ ])
 {
  igraph_t  g;
  igraph_vector_t membership;
  igraph_vector_t csize;
  igraph_integer_t no;
 
  long int i,j=0,id=0;
  long int b[100000]={0};
  long int c[100000]={0};
 
  long myArray1[numberoflines]={0};
  long myArray2[numberoflines]={0};
  long myArray3[30000]={0};
 
//first,read an edgelist in order to create a graph.
if (argc!=2)
 {cout<<"You must suppy edge file name!"<<endl; }
 
FILE * input;
input=fopen(argv[1],"r");
 if (!input)
   { cout<<"error"<<endl;}
   igraph_read_graph_edgelist(&g, input,  0, IGRAPH_UNDIRECTED);
   fclose (input);
   
   cout<<"Vertices count:  "<<(int)igraph_vcount(&g)<<endl;
   cout<<"Edge count:   "<<(int)igraph_ecount(&g)<<endl;
 
 //decompose the graph and store component id of each vertex in vector membership, store component size of each
 //component in vector csize, store number of components in igraph_integer no.
   igraph_vector_init(&membership,1106000);
   igraph_vector_init(&csize, 100000);
   igraph_clusters(&g, &membership, &csize, &no,IGRAPH_WEAK);
 
//in the following, we pick out the first column of vertices, and record each headword in myArray3[].
ifstream fin;
fin.open(argv[1]);
if(fin.is_open())
{
   for (int i=0; i<numberoflines; i++)
   {
         fin >> myArray1[i];    //read the first number in each line and store in myArray1
         fin >> myArray2[i];    //read the second number in each line and store in myArray2
      if(fin.eof()) break;
   }
}
fin.close();

// record the headwords in myArray1 to myArray3, to make sure that each headword in myArray3 is different.
myArray3[0]=myArray1[0];
for(i=1;i<numberoflines;i++)
{
  if (myArray1[i]!=myArray1[i-1])
    {  j++;
    myArray3[j]=myArray1[i];
 }
}
cout<<"j="<<j<<endl;
//in the following part, we find out headwords which are in the same component and compute the histogram.
for(i=0;i<j+1;i++)
  {  id=VECTOR(membership)[myArray3[i]];
  // b=(long int*)calloc(no,sizeof(int));       //no is the total number of components and calloc allocate memory to b.
   b[id]=b[id]+1;
   c[b[id]]=c[b[id]]+1;  
  }
//print the histogram
cout<<"headword group size******number of this size\n"<<endl;
  for(i=0;i<no;i++)
 {cout<<b[i]<<"      "<<c[b[i]]<<"\r\n"<<endl;}
 
igraph_vector_destroy(&membership);
igraph_vector_destroy(&csize);
  
return 0;
  
   }

reply via email to

[Prev in Thread] Current Thread [Next in Thread]