J'ai un problème où je dois copier une structure et l'ajouter à la nouvelle mémoire puis libérer l'ancienne mémoire. Ensuite, je dois incrémenter pour créer de l'espace pour la nouvelle mémoire et ajouter à nouveau. Je pensais que j'avais la logique correcte mais je continue à avoir une erreur de segmentation. Je ne peux pas comprendre où je vais mal.Comment copier une structure?
Voici une copie de ma structure:
struct childrensBook *book = (struct childrensBook *) malloc(sizeof(struct childrensBook)); //Structure of book #1
book->title = (char *)malloc(100); //allows memmory of 100 characters
book->author = (char *)malloc(100); //allows memmory of 100 characters
book->publisher = (char *)malloc(100); //allows memmory of 100 characters
book->copyright = 0;
book->price = 0;
Voici une copie de ma fonction ajouter:
int addRecord()
{
int headptr = 0;
struct childrensBook *book = malloc(sizeof(struct childrensBook)); //get book structure
struct childrensBook *book1 = malloc(sizeof(struct childrensBook)); //create structure book1
memcpy(book->title, "We're Going on a Bear Hunt", 26); //populate fields of book
memcpy(book->author, "Michael Rosen", 13); //populate fields of book
memcpy(book->publisher, "Little Simon", 12); //populate fields of book
book->copyright = 1989; //populate fields of book
book->price = 7.99; //populate fields of book
memcpy(book1, book, sizeof *book1); //copy fields of book to book 1
free(book);
}
Et voici mon appel à la fonction:
else if(x==4)
{
addRecord();
fprintf(stderr, "You have added the record: %s\n", book->title);
free(book);
moveptr++; //here to incrememnt for new space. This is a globaal variable
}
Ne pas jeter le résultat de 'malloc' et amis C. (Notez que vous êtes déjà inconsistenly Renversement/pas coulée dans votre code) . Et ** toujours ** vérifier le résultat des fonctions qui pourraient rencontrer une erreur: 'malloc' peut renvoyer un pointeur _null! – Olaf
Utilisez 'strncpy' pour copier des chaînes! Et n'utilisez pas de nombres magiques! Et utilisez l'affectation normale pour copier une 'struct'. 'memcpy' inhibe la vérification de type. – Olaf
Sur quelle ligne se trouve un défaut de segmentation? Ceci est très important et très facile à diagnostiquer, donc vous devriez le faire afin d'obtenir de bonnes réponses. – anatolyg