Je rencontre des problèmes avec memcpy en lançant une erreur de segmentation, et je n'arrive pas à localiser la source de l'erreur.Vous ne savez pas exactement, segfault sur memcpy?
typedef struct {
int record_code;
char* record_name;
char buffer[6004];
} record;
record* rec;
char* ptr = rec->buffer;
//--DEBUG
printf("ADDR OF PTR: %p\n", ptr);
printf("SIZE OF BUFFER: %d\n", sizeof(ptr->buffer));
//--End DEBUG
create_record(ptr);
Je veux ajouter une valeur int dans mon tampon, mais je me fais un SEGFAULT sur cette ligne
memcpy(ptr, &key, sizeof(key));
dans cette fonction
int counter = 0;
int create_record(char* ptr) {
int key = counter;
//--DEBUG
printf("ADDR OF PTR: %p\n", ptr);
printf("SIZE OF KEY: %d\n", sizeof(key));
//--End DEBUG
memcpy(ptr, &key, sizeof(key));
ptr += sizeof(key);
int integer = rand_int();
memcpy(ptr, &integer, sizeof(integer));
ptr += sizeof(integer);
char* word = rand_string();
memcpy(ptr, word, strlen(word));
ptr += strlen(word);
counter++;
}
Les seules raisons que je pouvais Pensez à memcpy lancer un segfault est si les pointeurs sont des ordures ou la taille de la chose que je tente de jeter dans l'emplacement de la mémoire est supérieure à la mémoire que j'ai allouée. Mais j'essaie simplement de mettre un entier (taille = 4 octets) dans un buffer alloué à 6004 octets, donc ça ne semble pas être un problème de taille ... et l'adresse du pointeur que j'ai correspond à ce qu'il avait été créé à l'origine (je ne suis pas sûr si cela compte réellement tbh ...).
La sortie que je reçois des impressions sont ces
ADDR OF PTR: 0x10
SIZE OF BUFFER: 64004
(now inside create_record)
ADDR OF PTR: 0x10
SIZE OF KEY: 4
Quelqu'un peut-il me dire où je vais mal?
Merci à l'avance
'' enregistrement * rec'' crée pointeur sur la pile qui pointe vers nulle part (nulle ou indésirable). Vous devriez créer rec sur la pile ('' 'record rec''') ou utiliser malloc et ensuite le remplir sur tas – user996142