2016-04-10 6 views
-3

Gut, lassen Sie mich diese Frage wischen und versuchen Sie es erneut:Malloc Beteiligung Strukturen

Ich habe zwei Strukturen wie folgt definiert:

LangData

typedef struct 
{ 
    char languageName[60]; 
    char stopwords[2000][60]; 
    int wordcount; 
} LangData; 

Die erste Struktur enthält den Namen einer Sprache , eine Liste von Wörtern, die dieser Sprache entsprechen, und einen Zähler, um die Anzahl der Wörter zu verfolgen.

AllData

typedef struct 
{ 
    int languageCount; 
    LangData languages[]; 
} AllData; 

Die zweite Struktur enthält in erster Linie eine Reihe von der ersten Struktur und einen Zähler der die Anzahl von Sprachen zu halten, mit denen ich arbeite.

Ich muss Speicherplatz für Sprachen [] dynamisch reservieren, da es keine bestimmte Anzahl von Sprachen gibt, mit denen ich mich beschäftige.

Dies ist, was ich getan habe, um zu versuchen, das Problem zu lösen, aber ich bin mir nicht sicher, ob es korrekt ist. Es ist einer von vielen Bereichen innerhalb meines Codes, die Probleme verursachen könnte, und ich versuche das Problem zu lokalisieren

int langCount = 0; 

while(readdir(d)) //d is a directory containing language files. 
    langCount++; 

AllData *data = malloc(offsetof(AllData, languages) + 
     sizeof(LangData)*langCount); 
data->languageCount = langCount; 
+1

Keine Notwendigkeit, ein Experte zu sein. Verwenden Sie einfach einen Debugger. – Drop

+2

"Ich weiß nicht, wo mein Problem liegt" und "Ich entschuldige mich erneut für den Berg von Code" bedeutet, dass Sie nicht bereit sind, das Problem zu uns zu bringen. Einzugrenzen; Schreiben Sie ein kleineres Programm, das Ihr Problem reproduziert, und finden Sie heraus, wo das Problem liegt, und kommen Sie dann zu uns zurück. –

+0

Oder stellen Sie eine spezifischere Frage. Nehmen Sie zum Beispiel den Code heraus, beschreiben Sie das Problem, Ihre Plattform und Ihre bevorzugte Debugging-Methode und fragen Sie nach Hilfe, um diese Methode anzuwenden. –

Antwort

-1

Die verschachtelte Struktur kein Zeiger ist, so gibt es keine Notwendigkeit, es zu verteilen. Für die AllData struct Verwendung:

AllData *all = malloc (sizeof(*all)); 

Edit:

gerade gesehen, dass Sie die verschachtelten eine als Array verwenden. Nur zuteilen die verschachtelte Struktur in der gleichen Art und Weise wie das andere, nachdem Sie AllData zugeordnet:

all->langdata = malloc (sizeof(*all->langdata) * n); 

wobei n die Anzahl der Elemente ist ... Ich würde auch die Definition ändern von LangData lang [] zu LangData * Daten