Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/08/2020, à 16:01

zephyre123

[RESOLU] Retournement d'une adresse locale d'une fonction erreur

Bonjour,

Je suis débutant en programmation en langage c et pour ce faire j'ai acheté le livre méthodologie de la programmation en langage c recommandé sur le site developpez.com =>  https://c.developpez.com/livres/index/? … 2100490184

Ce livre est fortement recommandé pour les débutants.

J'ai recopié le code source suivant situé à la page p = 98 présenté ci dessous :

#include <stdio.h>
#include <stdlib.h>

static char* premier_appel_fonction(void)
{
	char c = '@';
	return &c; // retourne une adresse local qui est détruite apres l'appel de la fonction
}

static void deuxieme_appel_fonction(void)
{
	char c = '#';
}

int main(void)
{
	char *p = premier_appel_fonction();
	printf("Valeur pointé par p = %c lors du premier appel de fonction\n", *p);
	
	deuxieme_appel_fonction();
	printf("Valeur pointé par p = %c lors du premier appel de fonction\n", *p);
	return EXIT_SUCCESS;
}

Comme on retourne un pointeur sur une variable locale de la fonction = premier_appel_fonction() je devrai voir d'après mon livre un changement de la valeur pointé par p car l'adresse rendre dans la pile de fonction.
J'ai bien le warning du compilateur gcc = retournement_adresse_local.c:7:9: warning: function returns address of local variable [-Wreturn-local-addr]
Cependant je n'arrive pas à éxécuter le programme car j'ai une erreur de segmentation.
Es ce que cela est du aux améliorations du compilateur GCC ?
Es ce que vous pouvez le tester de votre coté et me dire quels sont vos retours ?

Merci pour votre aide.

Dernière modification par zephyre123 (Le 31/08/2020, à 13:07)

Hors ligne

#2 Le 30/08/2020, à 16:55

pingouinux

Re : [RESOLU] Retournement d'une adresse locale d'une fonction erreur

Bonjour,
Si, après le premier appel, tu imprimes p au lieu de *p, tu constates que c'est un pointeur nul. C'est ce qui explique le Segmentation fault.

Hors ligne

#3 Le 31/08/2020, à 13:06

zephyre123

Re : [RESOLU] Retournement d'une adresse locale d'une fonction erreur

ok pingouinux merci pour tes explications mais ce qui est bizarre c'est que dans le livre methodologie de la programmation il n'obtienne pas le même résultat que moi.
Peut être c'est aléatoire c'est à dire que si le pointeur est nul on obtient Segmentation fault mais si ce même pointeur est utilisé lors du second appel de la fonction on obtient le résultat du livre.
Merci pour ton aide en tout cas pingouinux.

Hors ligne