Rechercher : dans
Par :

Erreur memcpy()

Dernière réponse le 21 oct 2009 à 23:04:45 romanzo_cirminale, le 21 oct 2009 à 18:22:04 
 Signaler ce message aux modérateurs

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.

Configuration: Linux
Firefox 3.0.6

Meilleures réponses pour « Erreur memcpy() » dans :
Le contrôle des erreurs Voir Le contrôle d'erreurs Le codage binaire est très pratique pour une utilisation dans des appareils électroniques tels qu'un ordinateur, dans lesquels l'information peut être codée grâce à la présence ou non d'un signal électrique. Cependant le...
Gestion des erreurs et exceptions Voir Gestion des erreurs et exceptions Les lignes de code que vous avez étudiées jusqu’à présent ne constituaient pas de vrais programmes mais des exemples. Elles ne comprenaient donc aucun traitement des erreurs. Les programmes que vous développerez...
Codes d'erreur de Windows VoirLa liste ci-dessous détaille les codes d'erreur s'affichant dans les boîtes de dialogue sous Windows : Code Description ------------------------ 1 Fonction incorrecte. 2 Le fichier spécifié est introuvable. 3 Le chemin d'accès spécifié...
[MSN] Erreurs 0x80072ee6 - problème de connexion VoirErreurs 0x80072ee6 Pour résoudre ce problème, supprimer les cookies, vider le cache et l'historique du navigateur Internet Explorer. Puis cliquer sur Démarrer / Exécuter et saisir : regsvr32 MSXML3.dll Enfin, redémarrer l'ordinateur pour...
[IE] Erreur de script / Effectuer un débogage VoirDe temps en temps, lorsque vous naviguez sur le Net et que vous chargez une page Web, un message d'erreur de script survient : Une erreur est survenue. Une erreur est survenue sur le script de cette page. Souhaitez-vous effectuer un débogage...

1

loupius, le 21 oct 2009 à 18:35:29

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.

Répondre à loupius

2

romanzo_cirminale, le 21 oct 2009 à 19:39:05

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?

Répondre à romanzo_cirminale

3

 loupius, le 21 oct 2009 à 23:04:45

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.

Répondre à loupius
Collection CommentÇaMarche.net