igraph-help
[Top][All Lists]
Advanced

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

[igraph] igraph_get_all_shortest_paths memory problem


From: Guilherme Ferraz de Arruda
Subject: [igraph] igraph_get_all_shortest_paths memory problem
Date: Tue, 1 Mar 2011 22:56:53 -0300

Hi,

I have a problem with memory allocation and free. My program memory is
increasing.
My code:

long int GetValue(igraph_vector_t *v, long int i){
  return (long int) VECTOR(*v)[i];
}

long int GetLastValue(igraph_vector_t *v){
  return (long int) VECTOR(*v)[igraph_vector_size(v)-1];
}

double Ppib(igraph_t* g, igraph_vector_t *v){
  long int ki = 0, kj = 0;
  igraph_vector_t res0;
  igraph_vector_init(&res0, 0);

  double acc = 1.0;

  igraph_degree(g, &res0,
igraph_vss_1((igraph_integer_t)VECTOR(*v)[0]), IGRAPH_ALL,
IGRAPH_NO_LOOPS);
  ki = (double)VECTOR(res0)[0];
  igraph_vector_clear(&res0);

  long int l = 0;
  for(l=1; l<igraph_vector_size(v) - 1; l++){
    igraph_degree(g, &res0,
igraph_vss_1((igraph_integer_t)VECTOR(*v)[l]), IGRAPH_ALL,
IGRAPH_NO_LOOPS);
    kj = (double)VECTOR(res0)[0];
    acc *= (double)1.0/(double)(kj - 1.0);
  }

  igraph_vector_destroy(&res0);

  return acc/ki;
}

int CreateSMatrix(igraph_t* g, double** S){
  long int N = igraph_vcount(g);

  long int vertice = 0;
  long int i = 0, j = 0, k = 0;

    for(vertice=0; vertice<N; vertice++){
        igraph_vector_ptr_t vecs;
        igraph_vector_ptr_init(&vecs, N);
        
        for (i=0; i<igraph_vector_ptr_size(&vecs); i++) {
          VECTOR(vecs)[i] = calloc(1, sizeof(igraph_vector_t));
          igraph_vector_init(VECTOR(vecs)[i], 0);
        }
        
        igraph_get_all_shortest_paths(g, &vecs, NULL, vertice,
igraph_vss_all(), IGRAPH_ALL);
        
        for (k=0; k<igraph_vector_ptr_size(&vecs); k++) {
          //P(p(i,b)
          S[GetValue(VECTOR(vecs)[k], 0)][GetLastValue(VECTOR(vecs)[k])] +=
Ppib(g, VECTOR(vecs)[k]);
        
          igraph_vector_destroy(VECTOR(vecs)[k]);
          free(VECTOR(vecs)[k]);
        }
        
        igraph_vector_ptr_destroy(&vecs);
        
      }

      for(i=0; i<N; i++)
        for(k=0; k<N; k++)
          if(S[i][k] != 0.0) S[i][k] = (-1)*log2(S[i][k]);

      return 1;
}

There is no error at compiling time and execution time.

It's almost  iqual as the igraph_get_shortest-paths.c example. I
checked it many times and couldn't find an memory problem.
Is there a trick?

Thanks for all.

Guilherme.



reply via email to

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