Bonsoir tout le monde,

je suis entrain de développer un petit programme et je l'ai passé sous valgrind dans le but de voir d'éventuels problèmes.

J'ai une suite d'erreurs que je ne comprends pas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
==5060== Invalid write of size 4
==5060==    at 0x1089CB: execute (vm.c:37)
==5060==    by 0x108833: main (main.c:47)
==5060==  Address 0x4a2923c is 11,164 bytes inside an unallocated block of size 4,184,392 in arena "client"
je ne peux pas poster le code, il commence à être un peu trop gros.

Globalement j'alloue une zone mémoire de 4096 octets.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
int *p_stack = calloc(4, 1024)
(Lorsque j'éxecute j'affiche son addresse de début et de fin j'obtiens ceci : 0x4a25240 - 0x4a29240)

Sur cette zone mémoire j'y mets un pointeur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
int *sp = stack + 1024 * 4
L'erreur de valgrind est du à cause de ce bout de code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
case PUSH:
	printf("PUSH\n");
	*(--ps_pr->sp) = ax;
	printf("%d\n", *(ps_pr->sp));
	break;
En regardant l'erreur donné par valgrind je constate qu'il parle de l'adresse 0x4a2923c qui serait dans une zone non allouée. Alors que normalement cette zone est bien allouée (je test bien le retour de mon calloc).
(De plus je précise que l'execution de mon programme ne recontre aucun problème, enfin jusqu'à présent !)

Je ne vois pas trop quoi faire.

En vous remerciant par avance pour d'éventuelles idées,
Je vous souhaites tout de même de bonnes fêtes de fin d'année !

Cordialement,
Reverse_