Explication de plantage malloc strcpy char

Utilisateur anonyme - 16 mars 2010 à 16:10
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 - 17 mars 2010 à 11:25
Bonjour,

Voila j'ai un petit problème mon programme se ferme lorsque je fais ça:

char fichierRecup = NULL;
fichierRecup = (char*) malloc (150* sizeof(char));


char fichierTemps= NULL;
fichierRecup = (char*) malloc (150* sizeof(char));

/*Ensuite j'affecte une valeur a fichierTemps*/
/* et je souhait copier le contenu de fichierTemps dans fichierRecup */

strcpy(fichier, fichierTemps);



et la c'est le drame....

Merci D'avance!!![

11 réponses

Utilisateur anonyme
16 mars 2010 à 16:21
oups petite : c'est pas strcpy(fichier, fichierTemps);
mais strcpy(fichierRecup , fichierTemps);
0
Utilisateur anonyme
16 mars 2010 à 16:22
oups c'est pas strcpy(fichier, fichierTemps);
mais strcpy(fichierRecup , fichierTemps);
0
fregolo52 Messages postés 1115 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 3
16 mars 2010 à 16:25
va falloir mettre plus de code parce que là, on ne voit rien.

Où est ce que tu initialises FichierTemp ?
0
Utilisateur anonyme
16 mars 2010 à 16:36
ui dsl je me suis encore trompé re voici le code:




char fichierRecup = NULL; 
fichierRecup = (char*) malloc (150* sizeof(char)); 

char fichierTemps= NULL;
fichierTemps= (char*) malloc (150* sizeof(char));

/*Ensuite j'affecte une valeur a fichierTemps*/

fichierTemps = " Erwan " ;
/* et je souhait copier le contenu de fichierTemps dans fichierRecup */



strcpy(fichierRecup , fichierTemps);

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
16 mars 2010 à 16:44
Salut,

char fichierTemps= NULL;

Rien qu'à cause de cela ça n'aurait jamais du compiler. Tu as défini un char et tu l'a initialisé à NULL qui est un pointeur (à moins d'avoir un compilateur C++ vu qu'à ce moment NULL ne sera plus un pointeur mais simplement 0), ça ne doit pas passer. Avec l'appel à strcpy c'est pire, passer un char au lieux d'un pointeur sur char... à moins que ce char soit un '\0' tu risque à chaque fois de partir en segfault (si ça n'a pas déjà été fait avant).
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
16 mars 2010 à 16:49
Erf tu m'a devancé, bon ba nouveau commentaire :)

Toujours tes pointeurs sur char définis en char. Sinon je ne vois pas l'intéret d'utiliser malloc pour alouer de la mémoire à tes pointeurs qui n'en sont pas, autant déclarer direct des tableaux de taille fixe.
0
Pistol_Pete Messages postés 1054 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 mars 2010 à 17:46
Salut
Tu as oublié les *. En effet, il te faut des pointeurs ici :

char *fichierTemps= NULL;


fichierTemps = " Erwan " ; FAUX!
il faut faire un strcpy(fichierTemps ,"Erwan");

A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
16 mars 2010 à 18:47
NULL vaut 0
C'est une valeur, pas un pointeur.
char a = NULL; // PARFAITEMENT CORRECT

ciao...
BruNews, MVP VC++
0
Utilisateur anonyme
16 mars 2010 à 18:53
dsl deja javé oublié les * quand j'ai exposé mon problème mais sinon dans mon programme je les avais mis.

Je pense avoir résolu mon problème.... je confirmerai demain .

ciao et merci
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
16 mars 2010 à 23:54
Salut,

NULL vaut 0
C'est une valeur, pas un pointeur.
char a = NULL; // PARFAITEMENT CORRECT

Extrait de mon stddef.h :
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif

C'est bien ce que je disais, en C NULL c'est un pointeur, (void *)0, mais en C++ c'est un entier. Vu que l'on est présentement dans le forum C et non C++, alors ici NULL est un pointeur et il n'est pas correct de l'assigner à un char.
0
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
17 mars 2010 à 11:25
On évite de toute façon d'utiliser NULL en C++. On reserve NULL pour le C, et celui-ci est typé sous la forme d'un pointeur, et non d'un entier. Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp

char a = NULL; // PARFAITEMENT CORRECT

Non, ça ne l'est pas. Peu rigouruex. Un compilateur te répondra:
warning: initialization makes integer from pointer without a cast


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0