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

printf("blabla");

Tithon
Tithon
Niveau 10
14 mai 2015 à 21:58:12

Bonjours tout le monde, j'ai un problème sur un mini programme que je fais juste pour me faire un rappel sur les vector que j'utilise plus depuis longtemps (vu que j'apprend la POO), j'avais pas envie de créer un topic juste pour ça :p)
c'est en c++, le programme est sensé faire une liste des cours donné par un établissement (histoire, math,...)

#include <iostream>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

int main()
{

    vector <string> listeCours(5,"pas encore de nom");
    string encore("oui");
    while(encore != "non")
    {
        int nbrCours(0);
        nbrCours += 1;
        cout<<"introduisez le nom d'un cours donné dans votre etablissement "<<endl;
        cin>>listeCours[nbrCours];
        if(nbrCours>4)
        {
            listeCours.push_back(listeCours[nbrCours])
        }
        cout<<"y a t il encore des cours?"<<endl;
        cin>>encore;
        

    }
    cout<<"il y'a au total "<<nbrCours<<" cours "<<endl;
    int nbrPassage(0);
    while(nbrPassage != nbrCours)
    {
        cout<<listeCours[nbrPassage]<<endl;
        nbrPassage += 1;


    }
}

    return 0;
}

J'ai du faire une bête faut quelque part puisque quand je veux compiler le programme trouve trois erreurs et me dit "nbrCours was not declared in this scope" "expected inqualified-id before 'return' " et à la dernière ligne : "expected declaration before ' } ' token"

Voilà ça doit être une bête faute mais je trouve pas, merci d'avance. :oui:

Tikim
Tikim
Niveau 21
14 mai 2015 à 22:04:44

nbrCours est déclaré dans une boucle while, la variable n'existe donc qu'à l'intérieur de cette boucle et pas au-delà, or tu l'utilises plus loin.

Déclare-le avant la boucle :)

Message édité le 14 mai 2015 à 22:04:59 par Tikim
Tithon
Tithon
Niveau 10
15 mai 2015 à 11:10:42

aaah voilà :hap: merci beaucoup mais il doit y avoir une autre faute quelque part puisque le compilateur affiche toujours :
"expected inqualified-id before 'return' " et à la dernière ligne : "expected declaration before ' } ' token".
J'en ai marre de pas être foutu de faire un programme pareil . :hap:

Lapintade
Lapintade
Niveau 30
15 mai 2015 à 11:29:12

Tu as un } de trop (avant le return 0)

Tithon
Tithon
Niveau 10
15 mai 2015 à 11:32:37

Voilà cette fois ça marche :o)) merci !

Pseudo supprimé
Pseudo supprimé 18 mai 2015 à 13:02:46

En fait je ne suis pas le seul à devenir agressif dans les textes imprimés à l'écran quand mon programme ne marche pas correctement ? :hap:

Au début: System.out.println("La réponse est" + res);
Après quelques heures: System.out.println("La putain de réponse est" + res);

rangerprice
rangerprice
Niveau 10
18 mai 2015 à 16:33:00

Non tes pas le seul Despé :hap:

Tikim
Tikim
Niveau 21
18 mai 2015 à 16:40:34

Pareil quand je fais des fichiers prototypes. Les premiers ont un nom du genre protoUart.c pour de la comm sérielle, après une heure ou deux de galère c'est bullshit.c et autres :rire:

Tikim
Tikim
Niveau 21
19 mai 2015 à 14:44:54

Godrik, j'ai vu sur un topic que tu utilisais Valgrind. Une fois que t'as éliminé toutes les fuites de mémoire tu élimines toutes les erreurs, ou il y en aura toujours ?

Parce que là j'en ai principalement une, j'ai pas l'impression que ce soit réellement un problème potentiel. Ca t'es déjà arrivé que les erreurs soient pas pertinentes ?

C'est plutôt une question générale mais si besoin je peux donner l'erreur et les bouts de code concernés.

godrik
godrik
Niveau 30
19 mai 2015 à 16:50:50

Ce qu'il faut voir c'est si l'erreur est un faux positif. Ca oeut arriver que certaines libs fassent des trucs pas nettes, souvent en accedant du materiel.
Tout le reste sont de vraies erreurs qu'il faut imperativement corriger. au mieux ce sont des bombes en devenir, au pire ca fait faire n'importe quoi a une lib ou a la pile.
Ce qu'il faut voir c'est que souvent il y a plein d'acces dansles choux, mais valgrind ne reporte que ceux qui sont hors des zones mallocees. Donc potentiellement il y en a plein d'autres qui changent l'etat du programme sans logique aucune.
Ou pire tu as les lectures de variables pas ecrites, en general ca derape dur ce trucs.

Tikim
Tikim
Niveau 21
21 mai 2015 à 17:02:58

Non ça vient pas d'une librairie, le truc c'est que je sais pas si valgrind peut à ce point comprendre mon code. J'ai comme erreur "Conditional jump or move depends on uninitialised value(s)" sur cette ligne :

while(*(wordsPlayed+wordPos) == true);

(Donc après un do { ... }).
wordsPlayed est un tableau de booléens (défini avec un simple 'typedef int bool;' et 0 et 1 pour true et false en min et maj) que j'initialise bien avant cette boucle. Il s'agit d'un pointeur déclaré en global et initialisé avec un malloc() avec la taille adéquate par rapport à ma liste de mots (dans un pendu). Je vérifie bien entendu que le pointeur soit non-NULL sans quoi je quitte le programme proprement (en désallouant tout ce qui a été alloué). wordPos est une variable générée pseudo-aléatoirement entre 0 et le nombre de mots dans ma liste.

Je comprends pas trop cette erreur valgrind étant donné que je vérifie que le pointeur soit non-NULL. Je me demande si valgrind va chercher à savoir si un offset d'adresse généré aléatoirement entre deux bornes pose problème ou pas, ou si dans le doute il met une erreur.

Le passage en question :

//Search a word unplayed
        do
        {
            // Randomly chose a number within 0 and the number of words in 'words.txt'
            wordPos = randNumb(0,nbLines);
        } while(*(wordsPlayed+wordPos) == true);

nbLines est trouvé plus haut dans le code en lisant le fichier words.txt et en comptant les lignes jusqu'à la fin du fichier. Le programme est bien sûr quitté proprement en cas d'échec à la lecture du fichier.

Ca va presque de soi mais randNumb est faite comme ça :
int randNumb(int a, int b) { int min, max; min = minVal(a,b); max = maxVal(a,b)+1; return ( (double)rand()/(double)RAND_MAX ) * (max-min) + min; }

Message édité le 21 mai 2015 à 17:07:45 par Tikim
godrik
godrik
Niveau 30
21 mai 2015 à 18:03:05

Tikim, ne t'inquiete pas valgrind comprends ton code. C'est un emulateur basiquement qui execute les instructions assembleur une par une et qui regarde si les access sont autorises ou si tu ne lis pas une valeur qui n'a jamais ete ecrite. Ici, c'est exactement ce qu'il te dit, tu fait un jump a partir d'une valeur pas initialise.
Donc valgrind dit que soit wordsplayed n'est pas initialise, soit wordpos n'est pas initialise siot wordsplayed[wordpos] n'est pas initialise.
Compte tenu que ce n'est pas "segmentation fault" qui te derange, j'imagine que tu es dans le dernier cas wordsplayed[wordpos] n'est pas initialize. Et ca ca sens que tu as fais un malloc, mais que tu n'as pas initialise les cases du tableau a false.

Tikim
Tikim
Niveau 21
21 mai 2015 à 18:26:35

OK merci pour le renseignement ! C'est fou comme tu trouves ça vite.

J'avais pensé à l'initialiser mais j'ai du me tromper en écrivant ma boucle, je parcourais de 0 à 'sizeWord' au lieu de 'nbLines'. La fatigue sûrement. La ou c'est cocasse c'est que sizeWord n'est pas initialisé à cet endroit (c'est aussi une variable globale), pourtant je n'ai jamais eu de segmentation fault. Peut-être qu'il valait 0 de base. J'ai exécuté le programme avec ce bout de code plus d'une centaine de fois et j'ai jamais eu de plantage.

En tout cas cette fois c'est bon, plus d'erreur ni de memory leak. C'était un petit jeu donc rien de critique mais je suis content d'avoir découvert valgrind, c'est bien utile. Un peu surpris tout de même de pas en avoir entendu parler plus tôt étant donné que je suis en fin de formation en Systèmes embarqués, typiquement un domaine où du code C va tourner pendant suffisamment longtemps pour que la moindre fuite de mémoire ait des conséquences. Merci pour l'aide :)

godrik
godrik
Niveau 30
21 mai 2015 à 19:00:50

pas de soucis. c'est exactement pour ca que je dis que les erreurs de valgrind sont toujours importantes. ici tu avais peut etre de la chace et sizeword se trouvait etre egal a 0. Mais si le code change (ou le compilateur, ou l'os, ou ...) tu te retrouverais avec une segfault incomprehensible.
Et en effet, je ne sais pas pourquoi les gens ne parlent pas plus de valgrind (ou des memchecker en general). Tu peux vouloir regarder electricfence aussi, c'est rigolo. http://en.wikipedia.org/wiki/Electric_Fence

rangerprice
rangerprice
Niveau 10
17 juillet 2015 à 20:42:30

Mais quesqui arrive au forum omg :ouch:

Google_Bot
Google_Bot
Niveau 14
17 juillet 2015 à 20:43:49

Bah ya ce débile qui a posté le même message sur ~20 topics rouges donc ils sont remontés tous en même temps.
J'ai fait des signalements pour flood de masse, j'encourage quiconque a le temps à faire pareil en boostant mes signalements, ça devrait accélérer le traitement.

godrik
godrik
Niveau 30
17 juillet 2015 à 20:46:57

NdM: je suis entrian de faire le menage, j'efface plein de message inutile a droite a gauche.

Google_Bot
Google_Bot
Niveau 14
17 juillet 2015 à 20:49:56

Merci bien :cute:

rangerprice
rangerprice
Niveau 10
17 juillet 2015 à 20:52:00

J'ai boosté la DDB :hap:

PhilippePaoli
PhilippePaoli
Niveau 10
18 juillet 2015 à 01:24:21

bonjour, a la rentrée je serais éleve en BTS SN EC (systeme numerique, option électronique et communication) je comptais commencer un travail de préparation en programmation mais avant cela je voulais savoir si c'etais pertinent, je pensais au C++, came sera utile dans la mesure ou je risque de concevoir et programmer des automates ou logiciels interactif? :hap:
voila pour mon premier post sur ce fofo :hap:

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