CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Problème Boucle Infini

edouarddu91
edouarddu91
Niveau 10
22 mai 2011 à 19:05:23

Bon voila je tente de corriger le problème mais j'obtiens un segmentation fault pour toute commande saisie.

Voici le lien du code :

http://codeviewer.org/view/code:1b0a

hyrulink2
hyrulink2
Niveau 7
22 mai 2011 à 19:19:11

Je sais pas trop ce que tu essaie de faire avec strcpy(commande[cpt], NULL);
mais tu doit mettre commande[cpt] = NULL; plûtot. En fait je sais pas si tu est familier avec les pointeurs mais NULL est une constant qui représente le pointeur inaccessible et veut dire qu'il n'y a pas de données justement.

Pour execve, honnêtement ça fait longtemps que je ne l'ai pas utilisé mais de mémoire il se fout de tes variables d'environnement contrairement à system.

edouarddu91
edouarddu91
Niveau 10
22 mai 2011 à 19:25:01

Et bien j'ai tenté de remplacer le strcpy par une égalité mais ca donne toujours le même problème. Je suis tenté de penser que le problème vient de la mémoire dynamique que j'ai alloué au début du programme de taille 20*(nb octets de char). Mais comment faire donc pour que cet espace alloué dynamiquement prenne correctement NULL ?

hyrulink2
hyrulink2
Niveau 7
22 mai 2011 à 19:29:56

Au temps pour moi, execvp utilise PATH.

Concernant la mémoire allouée au début il n'y a pas de problème pour lui assigner NULL.
Tu as toujours un segfault en remplacant strcpy(commande[cpt], NULL); par commande[cpt] = NULL?
Avec quelle commande tu testes?

hyrulink2
hyrulink2
Niveau 7
22 mai 2011 à 19:44:34

remplace cpt3 <= cpt par cpt3 < cpt dans ton while et ca devrai marcher

edouarddu91
edouarddu91
Niveau 10
22 mai 2011 à 19:50:07

Oui j'ai bien fait une égalité. Le seg fault se déclenche pour n'importe quelle commande. En ce qui concerne mon compteur cpt3 il ne sert que pour de l'affichage. :)

hyrulink2
hyrulink2
Niveau 7
22 mai 2011 à 20:04:58

Si t'essaie pas de faire ce que je te propose ne viens pas demander d'aide, le fait de faire cpt3 <= cpt entraine l'affichage de commande[cpt], autrement dit de NULL donc segfault.

edouarddu91
edouarddu91
Niveau 10
22 mai 2011 à 20:32:28

Ah oui effectivement c'était bien ca le problème. Je pensais vraiment pas que le problème venait de l'affichage de NULL. Je ne voulais en aucun cas t'offenser avec mon message. :-(

edouarddu91
edouarddu91
Niveau 10
22 mai 2011 à 20:33:37

En tout cas je te remercie vraiment pour ton aide. C'est vraiment sympa. :)

hyrulink2
hyrulink2
Niveau 7
22 mai 2011 à 20:41:41

De rien, désolé pour la réponse un peu sèche. Mais j'ai pas l'impression que t'ai bien saisi la signification de NULL, ce qui peut être embêtant quand on programme en C, je me trompe?

edouarddu91
edouarddu91
Niveau 10
22 mai 2011 à 20:43:28

Non c'est juste que je fais des bourdes qui devraient me sauter aux yeux pourtant. Et pour l'affichage de NULL qui provoque un segfault je viens tout juste de le découvrir. :)

Sangoku
Sangoku
Niveau 10
24 mai 2011 à 02:24:44

( j'ai pas lu tout le topic )

sinon normale la boucle inf :

while (ret == 1) {

if (c == ' ') {

mot[cpt]='\0';
strcpy(commande[cpt2],mot);

cpt=0;
cpt2++;

}

elle est ou la condition d'arret ?

si tu veux lire sur le stdin a chaque tour de boucle c'est plutot :

while ((ret = read(0, BUFFER, BUFFER_SIZE)))
{
condition a realiser avec ce qui a ete recuperer sur 0;
}

epitech ?

Sangoku
Sangoku
Niveau 10
24 mai 2011 à 02:27:13

a oui autant pour moi , avec la mise en page du code j'ai pas vue que l'accolate principale se refermait tout en bas.

tbop2
tbop2
Niveau 10
24 mai 2011 à 09:30:04

Salut l'ami. Tu sais utiliser le mode debug ou pas encore ?

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment