-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中,我不知道如何在下一个代码中填充向量,

#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 is a pointer, and it looks like VECTOR expects its argument to be a value. So change VECTOR(v) to VECTOR(*v).

于 2012-04-24T10:25:29.367 回答