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

••• [ Topic Officiel: Programmation ] •••

moi_maxime
moi_maxime
Niveau 7
08 novembre 2015 à 21:18:46

Tu try catch sur tout type d'exception?

deikiell
deikiell
Niveau 17
08 novembre 2015 à 21:25:17

oui le catch général

moi_maxime
moi_maxime
Niveau 7
08 novembre 2015 à 21:28:06

problème de pointeur peut-être?

deikiell
deikiell
Niveau 17
08 novembre 2015 à 21:37:36

C'est pas vraiment dans le code le problème, parce que tout fonctionne à merveille sur mon ordi quand jme connecte 127.0.0.1
C'est juste quand c'est 2 ordis distant que ça fuck, j'ai fait un mini-chat dans une sorte de lobby avant le jeu, je recevais tous ses messages mais ça crashait de son côté aussitôt que je lui envoyait un message. Donc elle recevait les octets mais ça plante juste après

Pseudo supprimé
Pseudo supprimé 08 novembre 2015 à 21:39:56

Yo les gars,

question pour voir sur les fonctions en c++,

J'ai écris une fonction qui me donne une valeur aléatoire entre deux bornes qui sont en paramètre et ça marche bien.

La je dois créer une fonction qui va créer un tableau (1 dimension et un autre à 2 dimensions) et le remplir de valeur aléatoire et pour se faire va appeler ma première fonction.

La ou ça fuck c'est que la taille du tableau doit être choisit par la personne qui va utiliser la fonction donc comme parametre de ma fonction j'ai la taille, la borne inférieur, la borne supérieur, sauf que quand j'essaie de créer un tableau d'entier dans ma fonction et de lui donner la longueur "taille" qui est mon paramètre ça me dit que taille doit être une constante.

Je comprend pas comment ça marche


int fonctionTableauAleatoire(int taille, int borne_inferieur, int borne_superieur)
{
    int tableauAleatoire[taille];
    for (int i = 0; i < taille; i++)
         {
            tableauAleatoire[i] = aleatoire(borne_inferieur, borne_superieur);
          }
}    

En gros c'est juste après la création de la fonction que ça fuck. Ah et la question dit pas que ma fonction doit retourner quelque chose, mais c'est pas obligé de retourner un int si ma fonction est un int?

Message édité le 08 novembre 2015 à 21:41:10 par Pseudo supprimé
deikiell
deikiell
Niveau 17
08 novembre 2015 à 21:43:02

met void à la place de int tu veux rien retourner

deikiell
deikiell
Niveau 17
08 novembre 2015 à 21:44:54

Je suis pas tellement habitué à C++ mais si il demande une constante tu pourrais toujours en faire une qui reçoit ton paramètre, comme


int fonctionTableauAleatoire(int taille, int borne_inferieur, int borne_superieur)
{
    const int tailleConst = taille
    int tableauAleatoire[tailleConst];
    for (int i = 0; i < taille; i++)
         {
            tableauAleatoire[i] = aleatoire(borne_inferieur, borne_superieur);
          }
}    
Message édité le 08 novembre 2015 à 21:45:22 par deikiell
Google_Bot
Google_Bot
Niveau 14
08 novembre 2015 à 21:45:49

Le 08 novembre 2015 à 21:39:56 EllinaVekoc a écrit :


int fonctionTableauAleatoire(int taille, int borne_inferieur, int borne_superieur)
{
    /* C'est ici que ça chie \/ */
    //int tableauAleatoire[taille];
    /* En l'occurrence tu devrais créer dynamiquement ton tableau en mémoire avec la syntaxe suivante: */
    int *tableauAleatoire = new int[taille];
    for (int i = 0; i < taille; i++)
         {
            tableauAleatoire[i] = aleatoire(borne_inferieur, borne_superieur);
          }
    /* N'oublie pas de libérer la mémoire à un moment donné dans ton programme, avec cette instruction: */
    delete [] tableauAleatoire;
}    

Corrigé / annoté :hap:

Pseudo supprimé
Pseudo supprimé 08 novembre 2015 à 21:47:29

Le 08 novembre 2015 à 21:44:54 Deikiell a écrit :
Je suis pas tellement habitué à C++ mais si il demande une constante tu pourrais toujours en faire une qui reçoit ton paramètre, comme


int fonctionTableauAleatoire(int taille, int borne_inferieur, int borne_superieur)
{
    const int tailleConst = taille
    int tableauAleatoire[tailleConst];
    for (int i = 0; i < taille; i++)
         {
            tableauAleatoire[i] = aleatoire(borne_inferieur, borne_superieur);
          }
}    

Ça marche pas :/, ça me dit la même chose que tailleConst doit être constante

J'ai même essayé en mettant


const int tailleconst = taille

ou

static const int = taille

et ça veut pas

deikiell
deikiell
Niveau 17
08 novembre 2015 à 21:47:49

Le 08 novembre 2015 à 21:40:42 Google_Bot a écrit :
T'as tenté de faire une capture du trafic avec Wireshark?
Ya quelques différences notables entre 127.0.0.1 et une communication entre deux machines réelles (la MTU, entre autres, même si ici ça ne devrait pas gêner).

:d) C'est sur que ça serait parfait, mais je devrais installer Wireshark sur son ordi, et rendu là ça devient un peu un problème

deikiell
deikiell
Niveau 17
08 novembre 2015 à 21:50:01

J'avais même pas remarqué qu'il avait pas fait le new int[taille]

Google_Bot
Google_Bot
Niveau 14
08 novembre 2015 à 21:52:56

Le 08 novembre 2015 à 21:47:49 Deikiell a écrit :

Le 08 novembre 2015 à 21:40:42 Google_Bot a écrit :
T'as tenté de faire une capture du trafic avec Wireshark?
Ya quelques différences notables entre 127.0.0.1 et une communication entre deux machines réelles (la MTU, entre autres, même si ici ça ne devrait pas gêner).

:d) C'est sur que ça serait parfait, mais je devrais installer Wireshark sur son ordi, et rendu là ça devient un peu un problème

"Son" ordi? Tu bosses pas sur le tien? :/ Au fond il suffit d'installer Wireshark sur le tien. Ce serait mieux si la capture se faisait des deux côtés (pour voir s'il n'y a pas une tuile entre vos deux machines, justement) mais déjà avec un seul point de capture tu verras s'il y a des trucs louches genre un petit RST par ci, ou une retransmission qui échoue par là...
EDIT: je viens de piger l'idée, l'une des machines ne t'appartient pas :o))

EllinaVekoc :d) Tente ma solution (et surtout, lis bien l'explication histoire de pas faire n'imp :hap:)

Message édité le 08 novembre 2015 à 21:54:26 par Google_Bot
Pseudo supprimé
Pseudo supprimé 08 novembre 2015 à 21:55:22

Le 08 novembre 2015 à 21:45:49 Google_Bot a écrit :

Le 08 novembre 2015 à 21:39:56 EllinaVekoc a écrit :


int fonctionTableauAleatoire(int taille, int borne_inferieur, int borne_superieur)
{
    /* C'est ici que ça chie \/ */
    //int tableauAleatoire[taille];
    /* En l'occurrence tu devrais créer dynamiquement ton tableau en mémoire avec la syntaxe suivante: */
    int *tableauAleatoire = new int[taille];
    for (int i = 0; i < taille; i++)
         {
            tableauAleatoire[i] = aleatoire(borne_inferieur, borne_superieur);
          }
    /* N'oublie pas de libérer la mémoire à un moment donné dans ton programme, avec cette instruction: */
    delete [] tableauAleatoire;
}    

Corrigé / annoté :hap:

Le 08 novembre 2015 à 21:50:01 Deikiell a écrit :
J'avais même pas remarqué qu'il avait pas fait le new int[taille]

Le 08 novembre 2015 à 21:50:40 Google_Bot a écrit :
Pour répondre de façon plus académique: en C++ comme en C ANSI (ou C89 si tu préfères), les tableaux automatiques ne peuvent être déclarés qu'avec des tailles constantes, déterminées au moment de la compilation.
Pour manipuler des tableaux dynamiques, tu as plusieurs options: celle que j'ai donnée plus haut (allouer dynamiquement la mémoire toi-même, à l'aide de new [], et la libérer une fois qu'elle ne sert plus, à l'aide de delete []), ou encore utiliser la classe std::vector de la STL.

Merci pour votre aide, cependant comme c'est pour un cours je ne peux pas utiliser l'allocation dynamique puisque c'est le chapitre de la semaine prochaine...

J'ai vu le type pointeur brièvement par contre, mais c'était vite fait et assez nébuleux, c'est peut-être de ce côté qu'il faut que je regarde.

deikiell
deikiell
Niveau 17
08 novembre 2015 à 21:57:04

Ma classe réseau est presque pareille coté client et serveur. Je reçois bien ses messages de mon côté donc je considère que les octets s'envoient comme il se doit

deikiell
deikiell
Niveau 17
08 novembre 2015 à 22:07:00

Ce serait plaisant en effet de pouvoir utiliser le debug sur son ordi, tout serait plus simple

Google_Bot
Google_Bot
Niveau 14
08 novembre 2015 à 22:09:10

Et tu peux pas juste "inverser" les rôles? Faire tourner la partie qui fonctionne sur son ordi, et la partie qui plante sur le tien? (pardon si j'omets des détails que t'as précisés tantôt, je viens de me lever et je ne suis pas encore tout à fait frais)

deikiell
deikiell
Niveau 17
08 novembre 2015 à 22:11:47

Je pourrais sauf que je devrais lui expliquer comment faire un port forward pour qu'elle puisse servir de serveur. J'veux pas etre chiant non plus

Jcrois que jvais essayer sur 2 ordi à l'école, ça va etre beaucoup plus simple

Pseudo supprimé
Pseudo supprimé 08 novembre 2015 à 22:15:29

Le 08 novembre 2015 à 21:58:07 Google_Bot a écrit :
Les pointeurs ne te serviront pas des masses pour cet exo si tu n'as pas le droit d'utiliser l'allocation dynamique.
Ici ce qu'il te reste à faire c'est utiliser un #define pour fixer la taille du tableau à la compilation.

#define LENGTH 42

/* ... */
    int tableauAleatoire[LENGTH] = { };
/* ... */

C'est spécifié que la dimension doit pouvoir être différente d'une utilisation à l'autre donc j'ai présumé que j'allais mettre la taille en paramètre, je viens de tenter de mettre la taille comme une constante aléatoire avec rand(), mais ça semble pas fonctionner non plus. Ça respecte pas toute la question si je met une constante au début du programme, mais ça va être mieux que rien si je trouve rien de mieux.

Merci pour ton aide [[sticker:p/1kku]]

Pseudo supprimé
Pseudo supprimé 08 novembre 2015 à 22:47:54

Le 08 novembre 2015 à 22:19:13 Google_Bot a écrit :
Si tu as officiellement vu les pointeurs (et ce à quoi ils servent), tu peux passer non-seulement la taille mais aussi le tableau de destination en paramètre, ce dernier sous la forme d'un pointeur sur des entiers justement. Le prototype aurait cette tête:
void genereTableau(int *tableau, int taille, int min, int max);
Ici, on assume que le tableau a été déclaré (et sa mémoire allouée, d'une façon ou d'une autre) au préalable.
Si ton job c'est juste d'écrire la fonction, tu peux t'en sortir comme ça. À partir de là, tu pourras appeler cette fonction aussi bien avec un tableau alloué dynamiquement, qu'un tableau alloué automatiquement avec une taille prédéfinie. (cf. la partie de ton cours sur les classes d'allocation, ça devrait pas tarder j'imagine)

D'accord, je vais tenter d'utiliser les pointeurs.

Merci!

moi_maxime
moi_maxime
Niveau 7
09 novembre 2015 à 01:11:54

Le 08 novembre 2015 à 21:37:36 Deikiell a écrit :
C'est pas vraiment dans le code le problème, parce que tout fonctionne à merveille sur mon ordi quand jme connecte 127.0.0.1
C'est juste quand c'est 2 ordis distant que ça fuck, j'ai fait un mini-chat dans une sorte de lobby avant le jeu, je recevais tous ses messages mais ça crashait de son côté aussitôt que je lui envoyait un message. Donc elle recevait les octets mais ça plante juste après

T'as essayé de faire runner tout sur ton ordi? Peut-être que ton code crash sur son ordi?

La vidéo du moment