-
CréateurSujet
-
décembre 21, 2023 à 3:03 am #34271BotParticipant
Bonsoir.
J’implémente des méthodes permettant de travailler sur des automates (suppression des epsilons, déterminisation, minimisation) et je rencontre un problème au niveau d’un malloc (ou des malloc) qui se déclenche occasionnellement (plus de détails sous le post).
Cependant après avoir visité plusieurs sites répertoriant ce problème je n’ai toujours pas saisi pourquoi cela se déclenche d’autant plus que je n’avais pas ce problème auparavant.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
CréateurSujet
-
AuteurRéponses
-
-
décembre 21, 2023 à 3:04 am #34272
Voici une capture d’écran de l’erreur :
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:07 am #34273
https://github.com/WanisC/Boolean-Expressions
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:07 am #34274
Voici le lien vers le repository
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:08 am #34275
Bonsoir,
Pouvez-vous nous indiquer la ligne dans votre code sur laquelle votre fonction `malloc()` est utilisée ?
Pouvez-vous nous indiquer si le code de retour a été testé ?
Pouvez-vous nous indiquer si celui-ci a été testé avec valgrind ou gdb ?——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:10 am #34276
Votre problème n’est pas dans le bon salon, le salon serait plus approprié.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:10 am #34277
Le problème est que je n’arrive pas à détecter le malloc en question.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:10 am #34278
Oh désolé, je ferais plus attention lors de mon prochain post.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:13 am #34279
Pour ce qui est du test avec gdb c’est en cours.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:16 am #34280
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:16 am #34281
Vous n’avez pas nécessairement besoin d’exécuter ligne par ligne les instructions avec `gdb` comme je l’avais indiqué dans le post précédent: https://discord.com/channels/669459781471436837/1185573336252690484/1185599558596706364
Lancer le programme, attendre qu’il plante puis afficher la backtrace avec la commande `bt` suffit à trouver la ligne où survient le problème rapidement.——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:19 am #34282
Votre programme n’est pas compilé avec les bons flags, pour en savoir plus vous pouvez voir le message suivant: https://discord.com/channels/669459781471436837/1179070996850942012/1184190991964581979.
Pouvez-vous poster la backtrace s’il vous plaît ?——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:22 am #34283
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:22 am #34284
Dois-je en déduire que le problème puisse survenir depuis ma méthode filtrage_alphabet ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:25 am #34285
Oui.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:27 am #34286
La valeur de retour n’est pas testée, elle devrait toujours l’être lors d’un appel à une fonction système.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:28 am #34287
Lorsque vous dîtes que la valeur de retour n’est pas testée, vous voulez dire que je devrais vérifier que ma valeur me retourne bien quelque chose ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:30 am #34288
Oui, chaque fonction système à une section nommée « RETURN VALUE » dans son manuel (voir la commande: `man`), vous devez tester la valeur de retour de ces fonctions.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:32 am #34289
Par exemple, dans le cas où votre ordinateur n’a plus assez de mémoire disponible pour faire une allocation votre fonction système retournera la valeur `NULL`.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:34 am #34290
Lorsque vous ne testez pas ce code de retour, votre fonction d’allocation peut échouer mais votre code demande tout de même d’écrire dans une zone mémoire qui n’a pas réussi à être allouée, de la même manière que des plaques de Reason, heureusement, votre système comporte d’autre système de sécurité permettant d’éviter une plantage total de la machine
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:37 am #34291
Cependant je ne fais que prendre des éléments uniques du paramètre comme cela pourrait se produire ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:38 am #34292
Les fonctions systèmes vous également remplir le registre processeur `rax`, ce registre peut être accéder via des fonctions telles que `errno` sous GNU/Linux ou `GetLastError()` sous Windows. Cela permet ensuite de transformer cet identifiant d’erreur (un nombre unique par erreur pour les différencier) en chaîne de caractères compréhensibles par un humain.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:40 am #34293
La logique de la fonction voudrait que le paramètre `size` corresponde à votre variable `taille`.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:41 am #34294
Ensuite, êtes-vous certain que `sizeof(char)` (1 octet) corresponde bien à un table d’entier de taille `taille` ?
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:42 am #34295
Cela me semble juste.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:43 am #34296
Ici, taille vaut le nombre de transitions de mon automate (je récupère toutes les lettres de mon automate).
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:44 am #34297
Mais je pense pourvoir modifier mon code et ainsi ne pas avoir besoin de la méthode `filtrage_alphabet`
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:44 am #34298
Si lorsque je récupère mes lettres je regarde si la lettre n’est pas déjà présente dans mon tableau.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:45 am #34299
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:45 am #34300
Mais le problème est que je n’ai pas à l’avance le nombre de lettres uniques que le tableau va contenir.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:50 am #34301
Je pourrais utiliser un `calloc()` en complément d’un compteur pour utiliser un `realloc()`, qu’en pensez-vous ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:51 am #34302
Pouvez-vous afficher l’erreur que retourne la fonction `calloc()`:
– Il vous faut ajouter l’en-tête suivante: `#include `
– Exemple d’affichage de l’erreur dans le cas où la fonction retourne NULL: `printf(« Error calloc() failed: %sn », strerror(errno));`——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:51 am #34303
Cette erreur ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:55 am #34304
Merci, en effet cette erreur était déjà visible dans votre post et la backtrace.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:55 am #34305
Quel est le résultat donné par l’outil `valgrind` ?
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:58 am #34306
Bizarre…
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 3:59 am #34307
Ai-je fait une mauvaise manipulation ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:00 am #34308
Oui, il faut passer par votre Makefile pour compiler car sinon la fonction `main` n’est pas compilé et donc pas présente.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:01 am #34309
Vous pouvez ajouter ces flags de compilation directement dans votre Makefile le temps du debug.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:03 am #34310
De cette manière ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:04 am #34311
Quel est le flag `-Og` ?
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:05 am #34312
Vous pourriez ajouter le flag `-ggdb3` également.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:06 am #34313
J’ai résolu le problème 🙂
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:08 am #34314
Félicitation ! Puis-je avoir une explication ?
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:08 am #34315
Un manque d’attention de ma part
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:09 am #34316
Lorsque vous avez stipulé l’absence de la fonction main, je me suis rendu compte que j’avais oublié de l’ajouter dans mon appel.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:12 am #34317
Une fois l’outil valgrind utilisé avec le fichier compilé, que dois-je chercher dans ma sortie ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:15 am #34318
Pouvez-vous me l’envoyer ?
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:16 am #34319
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:16 am #34320
Oups
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:17 am #34321
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:18 am #34322
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:19 am #34323
Je vois, votre problème semble avoir plusieurs problèmes comme la lecture et l’écriture dans des zones mémoires invalides et une libération mémoire invalide.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:21 am #34324
Effectivement, ces erreurs peuvent rendre le debug très complexe (case des crash plus loin dans votre code, actuellement sur une fonction pourtant juste à première vue), heureusement l’outil `valgrind` permet de détecter ces erreurs.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:23 am #34325
Les erreurs se lisent de préférence de haut en bas, dans cet ordre la première erreur est: `Invalid read of size 1`, cela signifie que vous tentez d’accéder à la lecture d’1 octet mémoire situé à une adresse mémoire invalide.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:24 am #34326
A la ligne 467, c’est bien ça ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:25 am #34327
Oui.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:25 am #34328
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:27 am #34329
Cela est dû au premier `malloc()`, vous allouez `sizeof(struct listChainee)` alors que la variable est de type: `struct listChainee *`.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:28 am #34330
Ainsi que le second.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:29 am #34331
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:29 am #34332
Est-ce meilleur en ajoutant `*` ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:31 am #34333
Non, je dis une bêtise, il n’y a pas d’erreur sur ce malloc().
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:42 am #34334
Le code présent sur le repos ne correspond pas à la ligne sur votre capture d’écran.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:43 am #34335
Pour la dernière capture d’écran ?
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:44 am #34336
Oui, celle-ci.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:45 am #34337
Votre variable `clé` comporte un accent, ce n’est normalement pas autorisé par le compilateur.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:46 am #34338
Je ne savais pas, le compilateur ne me ressort rien par rapport à cela.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:47 am #34339
Ce n’est probablement pas un problème pour vous, sur votre machine avec cette version de gcc.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:49 am #34340
Vous pourriez poser un point d’arrêt sur la ligne spécifié par `valgrind` avec `gdb` puis observer les valeurs des variables à cette ligne.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:52 am #34341
Il est possible de configurer `gdb` pour qu’il puisse s’arrêter automatiquement par point d’arrêt à chaque erreur `valgrind` rencontrée mais c’est aussi rapide de placer des points d’arrêts manuellement dans le cas de votre programme.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:52 am #34342
Le Invalid read of size 1 à la ligne 467 a disparu…
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:53 am #34343
Je vous laisse nous pourrons regarder cela ensemble à un autre moment.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:54 am #34344
Vous avez raison, il se fait tard.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:54 am #34345
Merci de votre patience.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:24 pm #34349
Bonjour.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:25 pm #34350
Le post peut être fermé, je ne sais pas si c’est à moi de le faire ou à un modérateur, faîtes le moi savoir si c’est bien à moi de le faire.
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:26 pm #34351
Encore une fois, merci pour votre aide et votre patience. 👍
——————–
cwano – Envoyé depuis le Discord : Culte du code -
décembre 21, 2023 à 4:56 pm #34352
✅ Résolu | malloc(): corrupted top size Aborted
——————–
cwano – Envoyé depuis le Discord : Culte du code
-
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.
Sujets récents
-
HTML/ CSS /JS/PHP – Débutant
par Bot
il y a 18 heures et 11 minutes
-
Cloud caméra
par Bot
il y a 1 jour et 16 heures
-
Problème écran en 144hz
par Bot
il y a 1 heure et 44 minutes
-
Discord bot projetc
par Bot
il y a 2 jours et 3 heures
-
Seeking a new work as a Full Stack Developer
par Bot
il y a 4 jours et 14 heures
Réponses récentes
Statistiques des Forums
- Comptes enregistrés
- 2 604
- Forums
- 51
- Sujets
- 940
- Réponses
- 17 614
- Mot-clés du sujet
- 0