Ich versuche, ein dynamisches Array zu verwenden, wenn ich es zu verwenden, versuche ich, den Speicher freizugeben, und ich bekomme diesen Fehler.freien Speicher der Struktur, die ein Array von anderen Struktur innerhalb hat - C
free(): invalid next size (fast): 0x00652098
Dies sind die Erklärungen der Struktur Variablen:
struct player {
int played_time;
int min_time;
int max_time;
int errors;
int color;
};
struct Players {
struct player *array;
size_t player_number;
size_t size;
};
typedef struct Players Player_list;
Dies sind die Verfahren verwendet, um das dynamische Array zu verwalten:
void initArray(Player_list *list, size_t initialSize) {
list->array = (struct player *) malloc(initialSize * sizeof(struct player));
list->player_number = 0;
list->size = initialSize;
}
void insertArray(Player_list *list, struct player element) {
if (list->player_number == list->size) {
list->size *= 2;
list->array = (struct player *) realloc(list->array,
list->size * sizeof(struct player));
}
list->array[list->player_number++] = element;
}
void freeArray(Player_list *list) {
free(list->array);
list->array = NULL;
list->player_number = list->size = 0;
}
int disqualified(Player_list *list, int errors) {
int i = 0;
for (i = 0; i < list->player_number; i++) {
if (list->array[i].errors >= errors) {
return 1;
}
}
return 0;
}
Und hier ist, wie ich es in der Verwendung Haupt:
/**
* When button is pressed 1 add an error to a random player
*/
void button_s_isr(void) {
int index = rand() % (players.player_number);
point_players->array[index].errors = point_players->array[index].errors + 1;
}
...
int main(void) {
...
// set up of GPIO
// get with scanf NUMBER_OF_PLAYERS and MAX_ERRORS values
int i;
for (i = 0; i < NUMBER_OF_PLAYERS; i++) {
struct player player;
player.color = PLAYER_COLORS[i];
player.errors = 0;
player.max_time = 0;
player.min_time = 0;
player.played_time = 0;
insertArray(&players, player);
}
while (disqualified(&players, MAX_ERRORS) != 1) {
// wait
}
printf("\n Se ha acabdo el juego: ");
freeArray(point_players);
return EXIT_SUCCESS;
}
Ich muss sagen, ich bin ziemlich neu in C, tut mir leid, wenn es schwer zu verstehen ist. Was ich tun möchte, ist eine dynamische Liste der Struktur (Spieler), wo jeder Spieler eigene Parameter (played_time, min_time, max_time, Fehler, Farbe) hat. Und innerhalb des Main möchte ich ein Spiel haben, wo ich diese Parameter von jedem Spieler kontrollieren kann. Jede Hilfe zur Verbesserung des Codes wird geschätzt.
Der Code, dass sie keinen Grund gezeigt hat verraten, warum die 'free()' ing versagt, so dass die Bug muss in dem Code sein, den du * nicht * zeigst, obwohl 'sizeof_array()' für mich keinen Sinn ergibt.Übrigens ist die verwendete Benennung ziemlich verwirrend. – alk
Ah ja, das Ergebnis von 'malloc()' & Friends in C muss nicht umgewandelt werden, noch wird es in irgendeiner Weise empfohlen. – alk
Vielleicht schlagen die Aufrufe von 'malloc()' und/oder 'realloc()' fehl. Sie sollten *** wirklich hinzufügen Fehler Überprüfung dort. – alk