[langage c] Prblème de pointeur
mohamed
-
thefox37 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
thefox37 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
voici la fonction suivante codée en langage c, et à la compilation j'obtiens un warning qui dit que j'ai retourné une variable local. Je ne comprends pas pourquoi car le type retourner est bien le même que celui de la fonction c.a.i un pointeur sur un char.
Marci de votre aide
voici la fonction suivante codée en langage c, et à la compilation j'obtiens un warning qui dit que j'ai retourné une variable local. Je ne comprends pas pourquoi car le type retourner est bien le même que celui de la fonction c.a.i un pointeur sur un char.
char *f2(void){ char tab[4+1]; strcpy(tab,"abc"); return tab; }
Marci de votre aide
A voir également:
- [langage c] Prblème de pointeur
- Langage ascii - Guide
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
3 réponses
salut, oui tab est une variable locale et a la sortie de la fct ce qui lui avait été alloué ds la pile est supprimée. Voici ce qu'il faut faire :
char *f2() { char *tab = malloc (5*sizeof(char)); strcpy (tab, "abc"); return tab; } // lorsq t'auras fini avec ton tableau ds l'appelant tu le libéres ainsi //supposons lors de l'appel t'as fait ainsi: char *tab = f2 (); // aprés utiisation... free (tab);
Bonjour,
je vous remercie de votre aide cela m'a appris des notions sur les variables locales que je ne connaissais pas.
La solution apporté à mon problème était correct cependant elle en a engendré une autre.
Dans la fonction f2() j'ai bien fait l'allocation de mémoire et le waening a disparu, et un autre est apparu:
warning: assignment makes pointer from integer without cast
Voila comment j'ai résolu le problème, j'ai caster avant le malloc:
Ma première question est la suivante pourquoi sur certaine machine il faut caster avant le malloc et pas sur d'autre?
Et la deuxième est que signifie exactement le (char*) devant le malloc?
Je tiens à préciser que je travail sur windows xp avec un logiciel nommé Dev-C++
Cordialment
je vous remercie de votre aide cela m'a appris des notions sur les variables locales que je ne connaissais pas.
La solution apporté à mon problème était correct cependant elle en a engendré une autre.
Dans la fonction f2() j'ai bien fait l'allocation de mémoire et le waening a disparu, et un autre est apparu:
warning: assignment makes pointer from integer without cast
Voila comment j'ai résolu le problème, j'ai caster avant le malloc:
char *tab = (char*)malloc(5*sizeof(char));
Ma première question est la suivante pourquoi sur certaine machine il faut caster avant le malloc et pas sur d'autre?
Et la deuxième est que signifie exactement le (char*) devant le malloc?
Je tiens à préciser que je travail sur windows xp avec un logiciel nommé Dev-C++
Cordialment