Tu try catch sur tout type d'exception?
oui le catch général
problème de pointeur peut-être?
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
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?
met void à la place de int tu veux rien retourner
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);
}
}
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é ![]()
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, commeint 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
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).
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
J'avais même pas remarqué qu'il avait pas fait le new int[taille]
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).
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 ![]()
EllinaVekoc
Tente ma solution (et surtout, lis bien l'explication histoire de pas faire n'imp
)
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é
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 denew [], et la libérer une fois qu'elle ne sert plus, à l'aide dedelete []), ou encore utiliser la classestd::vectorde 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.
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
Ce serait plaisant en effet de pouvoir utiliser le debug sur son ordi, tout serait plus simple
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)
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
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#definepour 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
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!
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?