Manipulation de buffer

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

  1. 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