OVH Cloud OVH Cloud

Probleme de compilateur... mais qui faut-il croire .....

34 réponses
Avatar
Irsla
Voila j'ai un code qui semble correct seulement voila

Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il devrait le
comprendre vu que le fichier est un .c) le compile sans erreur mais provoque
une erreur a l'execution ("la memoire ne peut etre written")

Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution

et enfin

gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unix\linux ) me sort un seg fault...
donc qui croire ...

je vous colle ci contre le code :

char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]='\0';
return (dest);
}

int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}


int main(void)
{

char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
return 0;
}

voila j'avoue que je ne sais qui croire en esperant que c'est un pb de
compilateur est pas de code ( ni des 2 a la fois ;) )
Merci d'avance

--
Irsla
--------------------------------------------------------------------
Une visite fait toujours plaisir, si ce n'est a l'arrivée c'est au départ ;)
--------------------------------------------------------------------

10 réponses

1 2 3 4
Avatar
DG
"Irsla" <whowen99~~ writes:
[...]
char tmp[] = "HELLO WORLD !";
sortie = malloc (sizeof (tmp));


ca change pas le pb j'y ai pas le droit ;)


Tu veux dire que tu n'as pas le droit à malloc ? Parce que c'est quoi
exactement l'énoncé de ton exercice, juste faire un équivalent de
strcpy (dans ce cas là, oui tu n'as pas besoin de malloc mais tu peux
quand même l'utiliser pour tester ton code) ?

C'est marrant, ce genre d'exercices me rappelle une certaine école
d'informatique parisienne où l'on a l'habitude de donner se genre de
petits programmes à écrire en cette période de l'année... :-)


Avatar
Bertrand Mollinier Toublet
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:
erreur mais provoque une erreur a l'execution ("la memoire ne peut etre
written")


Du mélange français/anglais dans le texte? Etonnant...

C'est pourtant vrai !


habituer des unixlinux ) me sort un seg fault...
donc qui croire ...


Typique d'un "Undefined Behaviour" (UB)

Du melange francais/anglais dans le texte ? Etonnant


:-) :-) :-)

--
Bertrand Mollinier Toublet
Facetieux...


Avatar
Bertrand Mollinier Toublet
Irsla wrote:

"Emmanuel Delahaye" a écrit dans le message de
news:

In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:

exact je l'ai dans vc++ mais devcpp et gcc le compile parfaitement sans
me signaler de warning et surtout l'execute parfaitement


Il faur revoir le reglage de tes compilateurs. Il y a des options à


activer.

Pour gcc (dev-c++), le minimum est :

-W -Wall -O2



Merci sauf que c'est VC++ qui me pose pb et pas les 2 autres ;)

Et bin dans ton projet, tu demandes a ce que les extensions du langage

soient desactivees, et tu montes le niveau de warning a 4. Ca marche bien.

--

Bertrand Mollinier Toublet
closity = 1.0 / farthitude
-- Arthur J. O'Dwyer



Avatar
Irsla
"DG" a écrit dans le message de
news:
"Irsla" <whowen99~~ writes:
[...]
char tmp[] = "HELLO WORLD !";
sortie = malloc (sizeof (tmp));


ca change pas le pb j'y ai pas le droit ;)


Tu veux dire que tu n'as pas le droit à malloc ? Parce que c'est quoi
exactement l'énoncé de ton exercice, juste faire un équivalent de
strcpy (dans ce cas là, oui tu n'as pas besoin de malloc mais tu peux
quand même l'utiliser pour tester ton code) ?

C'est marrant, ce genre d'exercices me rappelle une certaine école
d'informatique parisienne où l'on a l'habitude de donner se genre de
petits programmes à écrire en cette période de l'année... :-)


gagner je l'avoue c bien pour cette ecole la , on me l'a pas encore
demander, vu que je l'ai pas encore integré , et comme je me faisais chier
je l'ai fais , a vrai dire , mon code marche parfaitement ( vous n'avez pas
vu la version finale ) c t jsute par rapport a vc++ que ca mardais ;)
lol


--
Irsla
--------------------------------------------------------------------
Une visite fait toujours plaisir, si ce n'est a l'arrivée c'est au départ ;)
--------------------------------------------------------------------



Avatar
Stephane Legras-Decussy
"Irsla" <whowen99~~ a écrit dans le message news:
bl6v18$8ik$
super et si un user particulierement chiant me donne une string a
BIG_ENOUGH+1 caracteres ?
D'ou l'utilisation de pointeurs ;)


comment fais tu pour réserver de la memoire
sans tableau et sans malloc ?

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:


"Emmanuel Delahaye" a écrit dans le message de
news:
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:

Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation
d'une variable non initialisée'.


exacte je l'ai


Et ça ne t'interpelle pas plus que ça?


exact je l'ai dans vc++ mais devcpp et gcc le compile parfaitement sans
me signaler de warning et surtout l'execute parfaitement


Il faur revoir le reglage de tes compilateurs. Il y a des options à
activer.

Pour gcc (dev-c++), le minimum est :

-W -Wall -O2

Merci sauf que c'est VC++ qui me pose pb et pas les 2 autres ;)



Alors level 4.

main.c:30: warning: `sortie' might be used uninitialized in this
function


bien pour la conclusion d'une eventuelle solution malheuresement je
n'ai aps le droit d'utiliser malloc ;)


Un tableau fera l'affaire.


un tableau dynamique ? la j'avoue que je ne sais pas faire autrement
qu'avec des pointeurs


Pourquoi dynamique? Un tableau simple est suffisant

char a[BIG_ENOUGH];


super et si un user particulierement chiant me donne une string a
BIG_ENOUGH+1 caracteres ?


A toi de la couper. Tu connais la taille de destination, tu peux donc arréter
la copie quand c'est plein. Sans malloc()/realloc(), il n'y a pas
d'alternative.

C'est pas moi qui t'interdit l'utilisation de malloc(). Commence déjà de
faire un programme qui fonctionne dans la majorité des cas.

D'ou l'utilisation de pointeurs ;)


Et tu comptes l'initialiser comment, le pointeur? On utilise pas un pointeur
comme ça au hasard. Un pointeur n'est pas magique. Il faut l'initialiser avec
l'adresse d'un bloc dont on connait la taille et la validité.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/






Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Bertrand Mollinier Toublet
wrote:

erreur mais provoque une erreur a l'execution ("la memoire ne peut etre
written")


Du mélange français/anglais dans le texte? Etonnant...

C'est pourtant vrai !


habituer des unixlinux ) me sort un seg fault...
donc qui croire ...


Typique d'un "Undefined Behaviour" (UB)



Entre guillemets, quand même...

Du melange francais/anglais dans le texte ? Etonnant

:-) :-) :-)


J'ai pas la prétention d'écrire de la doc ou des messages d'erreur...

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/



Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:

Si je m'entete a vous prendre la tete avec ce probleme c'est que bien qu'en
ayant essayant de l'initialiser il continu a foirer ;)


(essaye de te relire, j'ai du mal à compredre ce que tu écris)

Sais pas. Montre le code qui ne fonctionne pas, avec le pointeur initialisé.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:

gagner je l'avoue c bien pour cette ecole la , on me l'a pas encore
demander, vu que je l'ai pas encore integré , et comme je me faisais chier
je l'ai fais , a vrai dire , mon code marche parfaitement ( vous n'avez pas
vu la version finale ) c t jsute par rapport a vc++ que ca mardais ;)


J'aimerais bien la voir la 'version finale'.

Et puis, puisque tu es encore à l'école, profites en pour soigner ton
orthographe. Tu es à la limite de l'incompréhensible...

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Emmanuel Delahaye wrote:

(essaye de te relire, j'ai du mal à compredre ce que tu écris)


Moi aussi!

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

1 2 3 4