Pour la boucle s’arrête sans raison

J’essaie donc de créer un programme permettant de lire un fichier ppm et de le stocker en mémoire. J’ai tout ce qui fonctionne jusqu’aux couleurs, cette fonction me pose des problèmes:

typedef struct{ int red, green, blue; } COLOR; COLOR * getNextColor(FILE *fd); COLOR **getColors(FILE *fd, int width, int height){ printf("\nentered get colors"); COLOR **colors = malloc(sizeof(COLOR*)*height); printf("\nallocated %d space height",height); int i,j; for(i = 0; i < height; i++, colors++){ *colors = malloc(sizeof(COLOR)*width); printf("\nallocated %d space width",width); for(j = 0; j < width; j++, *colors++){ printf("\nlooping through to get the colors for point (%d,%d)", j,i); //*colors = getNextColor(fd); } *colors -= width; printf("\nmoved the pointer for *colors back %d spaces",width); } colors -= height; printf("\nmoved the pointer for colors back %d spaces",height); return colors; } 

Je passe un pointeur de fichier qui pointe actuellement sur le premier chiffre de la première couleur, la largeur = 400 et la hauteur est 530. La sortie ressemble à ceci:

 allocated 530 space height allocated 400 space width looping through to get the colors for point (0,0) looping through to get the colors for point (1,0) looping through to get the colors for point (2,0) ... looping through to get the colors for point (398,0) looping through to get the colors for point (399,0) moved the pointer for *colors back 400 spaces allocated 400 space width looping through to get the colors for point (0,1) looping through to get the colors for point (1,1) ... looping through to get the colors for point (398,1) looping through to get the colors for point (399,1) moved the pointer for *colors back 400 spaces allocated 400 space width 

et le motif répète tout cela jusqu’à

 looping through to get the colors for point (399,36) 

puis se bloque. Des idées?

    Il y a un problème avec *colors++ qui ne signifie probablement pas ce que vous pensez qu’il fait. Ceci est dû à la priorité des opérateurs, la priorité la plus élevée a les opérateurs d’incrément / décrément postfix et la priorité la plus basse a l’indirection. Donc *colors++ signifie réellement *(colors)++ ce qui n’a pas beaucoup de sens. Vous avez probablement voulu dire (*colors)++