Ich muss einen Puffer mit variabler Länge von struct player
s innerhalb einer Funktion initialisieren. Bisher das ist, was ich kam mit:Erstellen einer Struktur auf dem Stapel innerhalb einer Funktion und Zuweisen einer Array-Position eines Arrays, das in einer anderen Funktion erstellt wurde
#include<stdio.h>
#include<stdlib.h>
struct player{
char name;
};
void players_init(struct player **players){
*players = malloc(2 * sizeof(struct player));
struct player p1, p2;
p1.name = 'X';
p2.name = 'Y';
(*players)[0] = p1;
(*players)[1] = p2;
}
int main(int argc, char *argv[])
{
struct player *players = NULL;
players_init(&players);
printf("%c\n", players[0].name); // prints X
printf("%c\n", players[1].name); // prints Y
return 0;
}
Meine Frage ist: da ich p1
und p2
innerhalb einer Funktion bin erstellen, sollten diese beiden Variablen auf dem Stack-Frame zu derselben Funktion gewidmet zugeordnet werden, Wenn diese Funktion beendet wird, sollten diese Variablen weg sein.
Wie Sie an meinem Beispiel sehen können, weise ich diese Variablen den Positionen des Puffers players
zu, der in einer anderen Funktion erstellt wurde.
Ich frage mich, warum mein Code funktioniert (wenn es wirklich funktioniert), da ich grundsätzlich Variablen referenziere, die aus meinem Verständnis nicht mehr existieren sollten, wenn players_init
endet.
Was fehlt mir?
Make 'players_init' an einem einen Spieler init Zeit, und übergeben Sie ihm einen 'Char'-Namen zu verwenden. Dann nenne es: 'players_init (& players, 'X'); players_init (& players, 'Y'); ' Dies wird wahrscheinlich Ihren Code wie erwartet unterbrechen, da Sie den nicht initialisierten Speicher überschreiben werden, der Ihren vorhandenen Code scheinbar korrekt funktionieren lässt. – sehrgut