2016-11-28 5 views
-4

こんにちは私は1つの関数に問題があります。宣言は:2つのポインタを持つC関数

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

そして、私はこれらの2つのポインタを** 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; 
. 
. 
. 

この後、私はクラスターを印刷する関数を呼び出す必要があります。機能load_clustersですべてのヘルプ;-)

+1

通常、**は関数がメモリを割り当て、割り当てられたメモリへのポインタを返すことを意味するので、ポインタへのポインタを渡す必要があります。 – stark

答えて

0

ため

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 
    } 
} 

感謝は、arrはローカル変数であるので、それに加えた変更は、呼び出し側には反映されません。

あなたが持っているものは、割り当てたいポインタ変数のアドレスです。したがって、逆参照し、struct cluster_tの配列にスペースを割り当てます。

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

また、don't cast the return value of malloc

関連する問題