2011-12-10 27 views
0

Valgrindの構造体の動的配列の割り当てこのエラーは、初期化されていないサイズ8の値を使用しています。構造体メンバにアクセスしようとするとエラーが発生します。Cの構造体の動的配列の割り当て

これを回避する方法は何ですか?ここで

void find_rate() 
{ 
    int num_lines = 0; 
    FILE * in; 
    struct record ** data_array; 
    double * distance; 
    struct record user_record; 

    in = open_file(); 

    num_lines = count_lines(in); 

    allocate_struct_array(data_array, num_lines); 

    data_array[0]->community_name[0] = 'h';  // the error is here 
    printf("%c\n", data_array[0]->community_name[0]); 

    fclose(in); 
} 

FILE * open_file() 
{ 
    ..... some code to open file 
    return f; 
} 

int count_lines(FILE * f) 
{ 
    .... counting lines in file 
    return lines; 
} 

私は配列を割り当てる方法です:

void allocate_struct_array(struct record ** array, int length) 
{ 
    int i; 

    array = malloc(length * sizeof(struct record *)); 

    if (!array) 
    { 
     fprintf(stderr, "Could not allocate the array of struct record *\n"); 
     exit(1); 
    } 

    for (i = 0; i < length; i++) 
    { 
     array[i] = malloc(sizeof(struct record)); 

     if (!array[i]) 
    { 
     fprintf(stderr, "Could not allocate array[%d]\n", i); 
     exit(1); 
    } 
    } 
} 
+0

? valgrindの出力も追加できますか? – IanNorton

+0

構造体レコードの定義を貼り付けることはできますか? – Louis

答えて

3

あなたはあなたが必要とする機能にallocate_struct_array

の配列のアドレスを渡しているので:

*array = malloc(length * sizeof(struct record *)); 

そして、呼び出し関数でdata_arrayを次のように宣言する必要があります。

struct record * data_array; 

としてそのアドレスを渡します。これは構造体のエラー

allocate_struct_array(&data_array, num_lines); 
+0

'sizeof(構造体レコード*)'? 'sizeof(構造体レコード)'または 'sizeof(**配列)'でなければなりません。 – AusCBloke

+0

ここのような意味があれば - http://stackoverflow.com/q/8460874/1090944、動作しませんでした。 – user1090944

+0

@AusCBloke sizeof(struct record *)は、構造体レコードへのポインタのサイズの割り当てメモリを意味します。 – user1090944

関連する問題