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++] STL : que choisir?

Virtuality
Virtuality
Niveau 8
30 janvier 2006 à 20:03:54

pour le debugger, en fait, j´avais oublié de cocher la case "debug symboles" mais j´ai ça apres le "segment fault" :
No symbol "init" in current context.
et c´est stopé...

JeanYvesYves
JeanYvesYves
Niveau 10
30 janvier 2006 à 21:12:45

si tu actives le debuggueur, normalement, il devrait te mettre un breakpoint a l´endroit ou il y a eu le segment fault.

Si c´est un projet SDL, le segment fault courant est la surface qui renvoie NULL et que tu essaies de blitter, vérifie cela.

Sinon, si c´est la liste chainée, vérifie tes itérateurs : si tu es sur un itérator, que tu erases l´objet qu´il pointe, alors une tentative d´y accéder fera le seg fault.

Vérifie tes tableaux : si tu as un débordement (tu essaies d´écrire a l´indice -1, ou taille + X, alors seg fault aussi (ou pire, écrasement...)

Virtuality
Virtuality
Niveau 8
30 janvier 2006 à 21:32:39

Et pourtant je blit rien....
J´ai tout, vraiment tout mis en commentaire, je nai plus qu´une fenetre noir avec :
SDL_Flip(init->Get_Screen());
Mais meme si je lenleve ca ne marche pas....
Pour les itérateurs, pareil, y a pas, et les tableaux aussi....
Tour à tour, j´ai essayé plein de trucs en commentaires, à chaque fois que je pensais avoir mis la main sur le problème, ça marchait tjrs pas!
hallucinant :-p

dnob700
dnob700
Niveau 10
30 janvier 2006 à 21:41:22

s´il est pas trop long, mais le code sur un wall (http://rafb.net/paste/) pour qu´un puisse jeter un coup d´oeil.

Virtuality
Virtuality
Niveau 8
30 janvier 2006 à 21:46:13

Ben en fait j´ai 7 fichiers et plus bcp de temps...
Si demain soir j´y arrive tjrs pas je le mettrai. :)
Pour le moment jai essayé de tester mon debugger sur un petit programme tiré du site de jyy.
Mais j´y comprend rien... si au moins ça marchait comme sur vb... je met un breakpoint, exécute et j´ai les valeurs des variables et tout le reste sur mon code... mais la, tout ce que jai c´est :
http://www.virt.tonsite.biz/perso/debugger.png
Je déclare un pointeur sans l´initialiser, c´est pas une folie? et regardez le message du debugger, c´est ridicule!? je peu faire quoi avec ça?
J´ai manqué un épisode sur la vie des debugger ou il y a un blème avec le mien? (gdb.exe d´apres ce quil y a dans les options).

Je revient la dessus demain, la je surchauffe :(
Merci de votre aide :)

dnob700
dnob700
Niveau 10
30 janvier 2006 à 22:02:41

Je vois aucun problème : tu as un programme qui amrche parfaitement et tu n´a pas défini de point d´arret. Je ne vois pas pourquoi le débogueur s´arrèterait.

En C tu as le droit de déclarer des pointeurs sans les initiliser. Du moment que tu ne t´en sers pas après (et c´est ce que tu fait ici).

C´est juste un peu "osé" de considérer tes int comme des pointeurs, mais si c´est bon pour le compilo, ça sera bon pour le débogueur.

Virtuality
Virtuality
Niveau 8
30 janvier 2006 à 22:16:25

Ok lol j´ai été con :non2:
Mais bon, ou que je mette un point d´arret, rien ne se passe non plus... ptet aussi normal vu quil y a pas de faute.

Ensuite j´ai posté ce qui peut être faux :
http://www.rafb.net/paste/results/gnSnFl85.

classe game + son constructeur.
init permet en fait l´initialisation de SDL (les paramètres sont X et Y de la fenêtre).
vala, bonne soirée et bonne nuit. :sleep:

Virtuality
Virtuality
Niveau 8
30 janvier 2006 à 22:17:13

pardon
http://www.rafb.net/paste/results/gnSnFl85.html

Virtuality
Virtuality
Niveau 8
06 mars 2006 à 18:23:15

Rebonjour!

en fait mes besoins on changés et je me retrouve coincé. Si je reprend ce bout de code (prédemment mis sur la premiere page) :

void ShowList(list<int>& L)
{
list<int>::iterator I;
for(I=L.begin();I!=L.end();I++)
{
cout << "element : " << *I << endl;

L.remove(*I);

}
}

int main()
{
list<int> L;
L.push_front(5);
L.push_back(7);
L.push_front(19);
L.push_back(6);
ShowList(L);
return 0;
}

J´ai simplement déplacé mon remove dans la boucle, mais voila que ça ne marche pas... ça me fais pareil que le erase.... Pourtant je supprime l´élément sur lequel l´itérateur pointe et je passe au suivant, n´est ce pas ainsi que list::remove fonctionne?
J´ai ensuite essayé avec ma structure (a la place du int dans lexemple du dessus), et la, je ne peu meme pas écrire "...".remove(*I); que jobtient ce message d´erreur :
file.cpp:49: instantiated from here

C:/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../.
./../include/c++/3.4.4/bits/list.tcc:181: error: no match for ´operator==´ in ´(&__first)->std::_List_iterator<_Tp>::operator* [with _Tp = SDL::get_bal]() == __value´

Ca me trouble assez et c´est surtout génant, je vous remercie d´avance pour d´éventuelles réponses :)

dnob700
dnob700
Niveau 10
06 mars 2006 à 18:41:21

je ne suis pas sur que l sois toujours valide après le remove.
Au mieux il pointe sur l´élément suivant et donc tu rate un élément sur deux, mais ça n´est pas obligatoire. Par contre, je crois que remove doit renvoyer un itérateur sur l´élément qui suis celui qui a été détruit. Donc ta boucle pourrait ressembler à ça :

void ShowList(list<int>& L)
{
list<int>::iterator I=L.begin();
while(I!=L.end())
{
cout << "element : " << *I << endl;
I=L.remove(I); //je crois que ça doit prendre directement un itérateur non ?
}
}

Mais, bon, je ne conait pas très bien la STL, donc peut-être que je dit n´importe quoi.

Virtuality
Virtuality
Niveau 8
06 mars 2006 à 19:26:29

Ben, justement, c´était censé être la différence entre erase et remove...
J´arrivais à utiliser remove en dehors de la boucle, mais pour ce que je veux faire ça m´est bien inutile...
par contre remove est de type void donc ne renvoie rien.

Si je met :

list<int>::iterator I=L.begin();
while(I!=L.end())
{
cout << "element : " << *I << endl;
L.remove(*I);
}

Le programme m´affichd 19 à l´infini (donc faut croire que I ne s´incrémente pas tout seul, par contre je pige pas pourquoi il affiche tjrs 19...), si je met ceci :
list<int>::iterator I=L.begin();
while(I!=L.end())
{
cout << "element : " << *I << endl;
L.remove(*I);
I++;
}

jobtient à la suite :
19
3277208
...
...

Je suis un peu perdu faut dire :-p

dnob700
dnob700
Niveau 10
06 mars 2006 à 19:39:20

c´est sur qu´il ne s´incrémente pas tout seul, mais je ne pense pas que tu puisse faire I++, après avoir supprimé I, car l´itérateur n´est plus valide.

Mais essaye avec erase, si il renvoie lui un iterateur sur l´objet suivant, c´est ce qu´il te faut.

Virtuality
Virtuality
Niveau 8
06 mars 2006 à 20:56:09

G E N I A L :ok:
Merci infiniment ça résout tous mes problèmes et je comprend enfin pourquoi erase ne fonctionnait pas -correctement- les précédentes fois.
Encore merci :-)

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