Ok les gars, juste une question rapide nous espérons que quelqu'un peut trouver mon erreur rapidement, mais je ne peux pas le voir au momentC - Problèmes avec des pointeurs vers des pointeurs, peut ne pas sembler le voir
Voici mon struct:
typedef struct {
Car *buffer[CAR_PARK_SIZE];
char *arrival_time[CAR_PARK_SIZE];
int keep_running;
int size;
} CarPark;
typedef struct {
Car *buffer[MAX_QUEUE_SIZE];
char *arrival_time[MAX_QUEUE_SIZE];
int keep_running;
int size;
int index;
} CarQueue;
typedef struct {
char str[3];
int id;
} Car;
Je vais essayer de parler ceci et nous espérons que j'ai fourni assez d'informations pour quelqu'un pour savoir où le problème réside peut-être, le problème est de faire avec le pointeur dans la mémoire tampon CarQueue, qui est censé être un tableau de pointeurs de voiture. Quand mon code s'exécute, il semble écrire le même pointeur que jamais dans le tampon CarQueue, voici le jeu par jeu.
_cq = CarQueue, _CP = CarPark
Ils sont tous deux GLOBALS
Mon thread appelle ces lignes pour générer une nouvelle structure de voiture. Cela devrait mettre le pointeur de la nouvelle structure de voiture dans le tampon CarQueue.
Le thread suivant tente d'extraire le pointeur de ce tableau et de le coller dans le sien, puis de le supprimer de l'ancien tableau. CarPark prend le pointeur de la voiture, le place dans sa matrice de stockage, puis le supprime de CarQueue (ou dans ce cas, augmente simplement l'index et le remplace plus tard). Je pense que le problème se situe autour de l'endroit où se trouve le commentaire dans le code, mais je ne suis pas certain. Finalement, si j'imprime le tableau dans CarPark, tous ses éléments semblent être exactement les mêmes. Est-ce que je passe un mauvais pointeur vers un pointeur quelque part accidentellement?
si je traverse à travers le réseau CarPark et l'imprimer comme suit
printf("| element %d is %s with pointer %d |\n", j, get_car_id(_cp.buffer[j]), _cp.buffer[j]);
Ils semblent être exactement le même article, même nom et pointeur.
Si vous allez utiliser ceci comme une file d'attente (ajouter et terminer, supprimer d'une fin) alors une liste liée serait une bonne structure de données. Pour un tableau, vous devez connaître la taille (ou utiliser une constante comme vous l'avez fait). Une liste chaînée est très facile à faire croître et à réduire, et vous ne serez pas limité pour toujours aux tableaux de taille MAX_QUEUE_SIZE et CAR_PARK_SIZE. – Shizzmo