2016-11-28 76 views
-4

你好,我有一个函数的问题。声明是:带两个指针的C函数

int load_clusters(char *filename, struct cluster_t **arr) 

而且我不知道如何在** arr之前使用这两个指针。 我希望我这样称呼它:

struct cluster_t *clusters; 
load_clusters("file.txt",&clusters); 

但我不知道这是否是正确与否。

在函数中我需要为它分配内存。 我认为它必须是这样的。

arr = (struct cluster_t**)malloc(count * sizeof(struct cluster_t*)); 
arr[0...x] = (struct cluster_t*)malloc(sizeof(struct cluster_t)); 
arr[0...x]->size += 1; 
. 
. 
. 

但毕竟这需要调用函数来打印集群。

void print_clusters(struct cluster_t *carr, int narr) 
{ 
    printf("Clusters:\n"); 
    for (int i = 0; i < narr; i++) 
    { 
     printf("cluster %d: ", i); 
     print_cluster(&carr[i]); AND THIS DOESN'T WORK AS I EXPECT 
    } 
} 

感谢所有帮助;-)

+1

通常,**表示该函数将分配内存,并希望返回一个指向已分配内存的指针,因此您需要将指针传递给指针。 – stark

回答

0

在功能load_clustersarr是一个局部变量,所以它所做的任何更改都不会反映在调用者。

你有什么是你想分配给指针变量的地址。所以取消引用并为struct cluster_t的数组分配空间。

*arr = malloc(count * sizeof(struct cluster_t)); 

另外,don't cast the return value of malloc