Manipulation de buffer

mcs -  
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 :
 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

Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
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;
}
0