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!
A voir également:
- Manipulation de buffer
- Mode anti manipulation - Forum C
- Lettre de motivation manipulateur radio ✓ - Forum Études / Formation High-Tech
- Mauvaise manipulation - Forum TV & Vidéo
- Uma frame buffer size c'est quoi - Forum Programmation
- _tkinter.tclerror: not enough free memory for image buffer - Forum Python
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 :
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;
}