嗯,我想做这个,
“...由于 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;
}