2017-02-16 3 views
0

Ich würde gerne ein Array von Zeigern von Strukturadressen, die unterschiedliche Größe und Zugriffsstruktur Mitglieder hat. Durch das Übergeben des Arrays von Strukturobjekten sind die Daten jedoch unregelmäßig und Bibliotheksfunktionen geben das Signal SIGABRT. Diese ist ein Teil meiner Code-Speicher Zuweisung von Array von Struktur Zeigern in c

struct data *device_info; 

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

Dies ist die Funktion Definition-

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

Ich bin neugierig. Was denkst du soll dir "sizeof (void)" geben? – StoryTeller

+0

Es gibt genug Platz, um Adresse der Struktur richtig zu speichern? Größe der Lücke ist 4 Bytes. – Govindh

+0

Wo wird die Knotenstruktur deklariert? –

Antwort

4

Ihre Funktion einen Zeiger auf eine Struktur erwartet, (eventuell eine von vielen der in aufeinanderfolgenden Speicher liegen).

Dies sollte genügend Speicher zuweisen, die der Speicher für eine einzelne struct data mal device_count:

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

ich, dass der Check für NULL weggelassen (die Sie Vorform muss), und ich vereint den Zeiger Definition mit seiner Initialisierung .

+0

Kopiert es die Daten in neu zugewiesenen Speicher oder kopiert einfach die Adresse der ursprünglichen Datenbank (Struktur)? – Govindh

+0

@Govindh - Er übergibt einen fortlaufenden Puffer an 'ipbt_database_manager_get_device_info'. – StoryTeller

+0

Ich muss nur die Startadressen der Strukturdatenbank speichern, nicht die ganze Sache. Gibt es einen Weg, das zu tun? – Govindh

Verwandte Themen