2017-02-16 24 views
0

構造体アドレスのポインタの配列を渡したいと思います。しかし、構造体の配列を渡すことによって、データは不規則であり、ライブラリ関数はSIGABRTシグナルを与えています。 これは、この関数は構造体ポインタのメモリ割り当て配列を配列

bool ipbt_database_manager_get_device_info(struct data *dev_info_ptr, char *device_id, int device_count) 
{ 
    struct node *current_device_info = first_device_info; 
    int count = 0; 

    if (!strcmp(device_id,"all")) { 
     while (current_device_info != NULL) { 
      dev_info_ptr[count] = current_device_info->node_data; 
      count++; 
      current_device_info = current_device_info->next; 
     } 
} 
+2

私は不思議です。 'sizeof(void)'はあなたに何を与えると思われますか? – StoryTeller

+0

構造体のアドレスを格納するのに十分なスペースを与えますか? voidのサイズは4バイトです。 – Govindh

+0

ノード構造体はどこに宣言されていますか? –

答えて

4

あなたの関数は、構造体へのポインタ、(連続したメモリ内の多くの嘘の可能性のいずれか)を見込んでdefinition-である私のコード -

struct data *device_info; 

device_info = malloc(device_count*sizeof(void); 
ipbt_database_manager_get_device_info(device_info, "all", device_count); 

の一部です。

これは、単一のstruct datadevice_countするためのメモリで十分なメモリを割り当てる必要があります:私はNULLのためにそのチェックを(あなたはプリフォームしなければならない)を省略し、私はその初期化とポインタの定義を統一

struct data *device_info = malloc(sizeof(*device_info) * device_count); 
ipbt_database_manager_get_device_info(device_info, "all", device_count); 

+0

新しく割り当てられたメモリにデータをコピーするか、元のデータベース(構造)のアドレスをコピーするだけですか? – Govindh

+0

@Govindh - 連続したバッファを 'ipbt_database_manager_get_device_info'に渡します。 – StoryTeller

+0

私は構造データベースの開始アドレスを保存する必要がありますが、すべてを保存する必要はありません。それを行う方法はありますか? – Govindh

関連する問題