Erreur memcpy()

romanzo_cirminale -  
 loupius -
Bonjour,

J'ai code un serveur en c++ que je fait tourner sans probleme en local, Je l'ai ensuite mis sur un serveur sans rien changer au code.
Le probleme c'est que maintenant mon programme ne marche plus et j'ai un segmentation fault du a un memcpy(), et je ne comprend pas du tout pourquoi!

Voici mon code, j'utilise une bilbiotheque MagickWand permettant de manipuler des images.

Code : C++

unsigned char* GetSlice(char slice, int num, size_t * x, bool flip,bool rotate)
{

//........
//magick_wand est l'objet correspondant a mon image
unsigned char* tmp = MagickGetImageBlob(magick_wand,x); // Returns the BLOB (Binary Large OBject) of the current active image
unsigned char * ret = new unsigned char[*x];
memcpy(ret,tmp, *x); // l'erreur apparait a l'appel de cette fonction

MagickRelinquishMemory(tmp);
magick_wand = DestroyMagickWand(magick_wand);

return ret;

Ce que je ne comprend pas c'est pourquoi mon programme marchait en local et ne marche plus sur mon serveur.

Merci de votre aide.

1 réponse

loupius
 
Toujours la même histoire avec les 'segment fault', un coup ça marche, un coup ça marche pas !
Il y a 99 % de chances pour que l'espace précédemment alloué ne soit pas suffisant lors de la recopie.
Peut-être aussi un problème 16-32-64 bits si le programme n'a pas été écrit de manière standard ?
Bonne continuation.
0
romanzo_cirminale
 
Hey merci de ta reponse,

normalement pas de probleme j'ai compile mon programme en 32 bits et mon serveur utilise un 32 bits.
Apres comment savoir si l'espace alloue est suffisant ou non?
0
loupius > romanzo_cirminale
 
Eh bien, juste avant le 'memcpy', il suffit d'afficher la taille de l'espace alloué et la taille nécessaire pour la recopie. De toute façon, il y a un problème d'allocation d'espace mémoire. Si il est avéré que l'erreur ne vient pas de là,, il faudra rechercher si les allocations mémoires déjà réalisées sont correctes car la conséquence d'une mauvaise allocation n'est pas toujours (et on pourrait dire n'est pas souvent) immédiate.
Bonne continuation.
0