Ich habe eine Funktion, die Werte auf eine Struktur setzt:Wie ordne ich Speicher korrekt einem dynamischen Array von Ganzzahlen zu, die in einer Struktur gespeichert sind?
Meine Struktur:
struct entry {
char key[MAX_KEY];
int* values;
size_t length;
entry* next;
entry* prev;
};
Meine Funktion:
// Sets entry values
void command_set(char **commands, int arg_num) {
struct entry e;
e.length++;
strcpy(e.key, commands[1]);
for (int i = 2; i < arg_num; i++) {
e.values[i - 2] = atoi(commands[i]);
}
}
wo:
- ** Befehle: ist ein Array von Strings
- arg_num: ist wie viele Strings sind in dem Array
- Schlüssel: ist der Name des Eintrags
- Werte: ganzzahlige Werte speichern in dem Eintrag
ich den Code ausführen und ich erhalte einen Segmentation Fault 11. Ich verengt es bis auf die Linie:
e.values[i -2] = atoi(commands[i]);
ich gehe davon aus, dass ich malloc verwenden müssen Speicher zuzuweisen, da ich nicht erscheinen mit meiner Schleife außerhalb der Grenzen gegangen zu sein. Ich habe versucht, den richtigen Weg zu verstehen, um Speicher zuzuordnen, aber ich kann nicht scheinen, die Syntax korrekt zu bekommen, um sizeof (int) einem dynamischen Array von ganzen Zahlen zuzuordnen.
Ich habe versucht:
e.values[i - 2] = malloc(sizeof(int));
und
e.values[i - 2] = (int) malloc(sizeof(int));
und
e.values[i - 2] = malloc(sizeof(int *));
Allerdings erhalte ich die Fehlermeldung:
incompatible pointer to integer conversion assigning
to 'int' from 'void *' [-Werror,-Wint-conversion]
Es gibt ziemlich viel falsch mit diesem, und auch einige verwirrende Sachen wie, was Sie mit 'struct entry e' nachher tun wollen. Was willst du erreichen? Die Unterstützung bei der Korrektur von Zuweisungen und nicht definiertem Verhalten ist möglicherweise irrelevant, da Ihre aktuelle Vorgehensweise möglicherweise ungeeignet ist. Versuchen Sie, ein vollständiges Beispiel dieses Codes in Ihrem Programm zu zeigen. – paddy