Manipulation de buffer
mcs
-
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à écrire un buffer de char en C++ et à stocker dedans des valeurs (unsigned int de taille 4).
J'ai essayé de faire pour tester :
J'ai bien les bonnes valeurs mais pourtant j'ai alloué au départ qu'une taille de 4 octets et j'insère deux int dedans. Je ne comprends pas. Pouvez-vous m'expliquer ?
Merci!
Je cherche à écrire un buffer de char en C++ et à stocker dedans des valeurs (unsigned int de taille 4).
J'ai essayé de faire pour tester :
char* buffer = (char*)malloc(sizeof(int)); int t = 8; unsigned int g = 154; memcpy( buffer, &t, sizeof(int) ); memcpy( buffer+sizeof(int), &g, sizeof(int) ); int a = *((int*)buffer); int b = *((int*)(buffer+sizeof(int)));
J'ai bien les bonnes valeurs mais pourtant j'ai alloué au départ qu'une taille de 4 octets et j'insère deux int dedans. Je ne comprends pas. Pouvez-vous m'expliquer ?
Merci!
1 réponse
-
Bonjour, faites un free(buffer) ou un realloc dessus et vous verrez dans un debugger le second int dépasse, plantage :
warning: Heap block at 006F2BF0 modified at 006F2BFC past requested size of 4
Mais on peut contourner le problème en sauvegardant le bloc avant de l'écraser et de le restaurer avant le free hehehe :#include <stdlib.h> #include <stdio.h> #include <string.h> int main(void){ char* buffer = (char*)malloc(sizeof(int)); int save = *((int*)(buffer+sizeof(int))); int t = 8; unsigned int g = 154; memcpy( buffer, &t, sizeof(int) ); memcpy( buffer+sizeof(int), &g, sizeof(int) ); printf("%d %d\n",*((int*)buffer),*((int*)(buffer+sizeof(int)))); memcpy( buffer+sizeof(int), &save, sizeof(int) ); free(buffer); return 0; }