erreur de segmentation lors de l'utilisation de memcpy
J'ai une question de base sur memcpy():
J'ai une structure qui a un couple de tableaux à ses membres.
Je voulais copier les données de la structure dans un buffer (mémoire allouée par malloc())
Je vois segmentation fault avec cette. Suis-je en train de faire quelque chose de mal dans cette mise en œuvre?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 10
struct temp {
int en;
int one[MAX];
int two[MAX];
};
int main()
{
struct temp *cpy;
int *buffer, i;
for(i=0; i<MAX; i++) {
cpy->one[i] = i;
cpy->two[i] = i * i;
}
buffer = malloc(3 * MAX * sizeof(int));
memcpy(buffer, cpy, sizeof(struct temp));
}
Comment puis-je copie complète des données dans le tampon?
Vous devez vous connecter pour publier un commentaire.
cpy
est juste un pointeur non initialisé (une référence) à la mémoire. Vous aurez besoin de l'initialiser en pointant à alloc avais de la mémoire avant de votrefor
boucle.Vous n'avez jamais alloue de l'espace pour
cpy
à point; en effet, vous n'avez jamais attribué aucune valeur àcpy
.D'abord, vous devez allouer de l'espace pour
cpy
. Dans votre code, il est juste un pointeur ne pointe pas n'importe où (ce qui provoque un comportement indéfini à essayer de l'utiliser):Ensuite, vous pouvez essayer ceci:
Il y a un problème possible avec ce code si. La structure peut contenir rembourrage. (En général, il ne sera pas, mais c'est une possibilité). Si il y a un rembourrage ensuite votre tampon jusqu'à la fin avec un peu de cochonneries entre les valeurs réelles.
Pour vérifier qu'il n'y a pas de rembourrage vous pouvez inclure:
puis votre code échoue à compiler, si il y a le rembourrage, et vous devrez copier chaque membre individially (ce qui serait ma solution préférée en premier lieu, en fait):
Juste ajouter que pour avoir un unpadded struct, vous pouvez également faire
sur les systèmes x86.