-8

うーん、これがやりたいんですが、

"... vt は Stl_To_Igraph_vector_ptr_t 内のスタックに割り当てられたベクトルであるため (つまり、ローカル変数として宣言しただけで、malloc を使用して割り当てていません)、関数が戻るとすぐに存在しなくなります。ポインタを保存します。 igraph_vector_ptr_t で vt に変換しますが、関数を終了するとそのポインターが無効になるため、後でエラーが発生します.vt を igraph_vector_ptr_t にし、malloc を使用して割り当てる必要があります。 ." Tamas によって、Using std::vector with Igraphに投稿されましたが、次のコードでベクトル v を埋める方法がわかりません。

#include <igraph.h> 
#include <stdlib.h>

int print_vector(igraph_vector_t *v) {
  long int i, l=igraph_vector_size(v);
  for (i=0; i<l; i++) {
    printf(" %li", (long int) VECTOR(*v)[i]);
  }
  printf("\n");
}

int main() {


  igraph_vector_ptr_t vecs;
  long int i;

  igraph_vector_ptr_init(&vecs, 3);
  for (i=0; i<igraph_vector_ptr_size(&vecs); i++) {
    VECTOR(vecs)[i] = calloc(1, sizeof(igraph_vector_t));
    igraph_vector_init( (igraph_vector_t*)VECTOR(vecs)[i], 10);
  }

  igraph_vector_t *v;
  v=(igraph_vector_t*)malloc(sizeof(igraph_vector_t));
  igraph_vector_init(v, 10);

   VECTOR(v)[0]=1;//-------??????????



  igraph_vector_ptr_set(&vecs,0,v);



  for (i=0; i<igraph_vector_ptr_size(&vecs); i++) {
    print_vector( (igraph_vector_t*)VECTOR(vecs)[i]);
    igraph_vector_destroy( (igraph_vector_t*)VECTOR(vecs)[i]);
    free(VECTOR(vecs)[i]);
  }

  igraph_vector_ptr_destroy(&vecs);
  igraph_vector_destroy(v);




  return 0;
}
4

1 に答える 1

0

vはポインタであり、VECTORその引数が値であることを期待しているようです。に変更VECTOR(v)VECTOR(*v)ます。

于 2012-04-24T10:25:29.367 に答える