IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Heap Overflow


Sujet :

Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Heap Overflow
    Bonsoir, je suis en L2 Info et j'ai un projet a rendre pour les examens dont le but est un programme qui produit sur la sortie un index des mots lus sur l'entrée: les mots doivent etre rangés en ordre croissant et accompagnés de de leur nombres d'occurences et des positions de leur première occurence ainsi que de leur dernière occurence.
    Les mots de l'index doivent etre implantés a l'aide d'un type string et nous devons recourir a une table de hachage avec résolution des collisions par chainage dynamique séparé pour gérer les mots de l'index, leurs nombres d'occurences et leurs positions extrèmes (je me rend compte d'ailleurs que je comprend pas forcement tres bien la derniere partie de cet enonce et que cela peut jouer dans mon probleme).

    Bref, voila le tableau est planté, passons au probleme: globalement le programme que j'ai coder marche correctement le probleme est lorsque le texte lu en entree est trop long pascal me renvoi un Runtime Error 203: Heap Overflow et je ne vois pas trop comment resoudre le probleme.

    Je joint les codes des deux fichiers pascals (l'implantation en d'un TDA liste et le programme en lui-meme )

    'Codes retires'

    Merci d'avance pour votre aide.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue !

    L'utilisation du type string dans ta structure n'est pas économe en mémoire mais bon, si on te l'impose...

    Vois déjà ce que ça donne en utilisant la directive d'allocation de mémoire pour ton programme :
    (respectivement : taille de la pile, tailles minimale et maximale du tas).

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    J'ai essayer, toujours le même problème.
    Au passage, ma taille minimale et maximale du tas etaient deja reglées a 0 et 655360 dans les options.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Quand tu parles d'un trop long texte, c'est quel ordre de grandeur ?

    Si tu as la possibilité de mettre le source complet en attachement, je pense que ça aiderait à cerner le problème.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    En ajoutant un compteur dont j'affichais la valeur et incrémentait la valeur apres la lecture de chaque mot, l'erreur s'est produite après la lecture de 1585 mots (un mot etant une chaine de caracteres non separé par un espace, un signe de ponctuation ou un caractere qui n'est pas reconnue par ma fonction EstChar).

    Je joins donc mes fichiers sources ainsi que un petit texte (une simple track list) sur lequel le programme marche bien et un texte bcp plus long (bgdos.txt qui est le "Bourgeois gentilhomme" de Molière) ainsi que le resultat de l'application de l'executable sur ces textes. Je joins aussi l'enonce complet du projet.

    'Pieces jointes retirees'

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Ah oui, 1585 fois les 256 caractères d'une string, ça fait quand même quelques centaines de Kb sur les 640 disponibles dans le tas.
    Le mot le plus long de la langue française ne dépasse pas 25 caractères, tu pourrais utiliser une string [25] dans le type cellule ?

    Je n'ai pas encore regardé les sources.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    C'est une tres bonne idée !! Avec un compteur l'erreur se produit apres plus de 7700 mots c deja bcp mieux, mais le Bourgeois gentilhomme de moliere qui m'a ete fournit par mon professeur, en version entiere compte au moins le doubles de mot. En tout cas, c deja mieux, merci beaucoup.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Die,
    Citation Envoyé par rtol05 Voir le message
    C'est une tres bonne idée !! Avec un compteur l'erreur se produit apres plus de 7700 mots c deja bcp mieux, mais le Bourgeois gentilhomme de moliere qui m'a ete fournit par mon professeur, en version entiere compte au moins le doubles de mot. En tout cas, c deja mieux, merci beaucoup.
    C'est sans issue réelle si tu continues à vouloir tout charger en mémoire, mais tu peux améliorer encore en passant à un autre compilateur, sachant utiliser le 32 bits, et te donnant donc accès à beaucoup plus de mémoire.

    Mais je le répète, cette démarche finit toujours par atteindre ses limites, variables selon la mémoire effectivement disponible sur la machine d'exécution.

    Je suis d'ailleurs très étonné par la démarche de ton professeur. Prouver que ça marche sur, au plus, quelques dizaines de mots, suffit pour montrer que l'algorithme est compris (à moins que ce soit pour te faire prendre conscience des limites dues à ton implémentation, mais je ne pense pas, ou alors il est carrément vicieux ).
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Oui, c vrai. Je pense donc que je v m'arreter la et regler les quelques bugs qui persistent et puis sa me fera des trucs a marquer dans le rapport de projet meme si le fait que mon professeur ait fourni un executable qui lui marche avec ce texte malgre sa longueure.(D'ailleurs je v voir si son executable marche avec un texte 2 fois plus long ). Mais commm je n'arrive pas a le faire planter peut importe la longeure du texte je v kan meme p-e plancher un peu plus sur mon probleme :p

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    salut chui dans la meme promo que toi et j'avais eu le meme probleme,
    et pour le resoudre j'ai transforme toutes mes fonctions constructives en mutatives, du coup j'ai plus cette erreur de heap overflow. En esperant que ca va t'aider ....

    Par contre tu devrais retirer ton programmes car je sais que y'a plusieurs personnes de notre promo qui font que du copier coller du net et ce forum est tres bien reference

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ok merci, j'y avait penser mais pas encore eu le temps de le faire pcq comme on avait pas commencer notre projet de PF on a du se mettre a fond dessus ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/09/2004, 14h11
  2. [Erreur] buffer overflow
    Par cmoulin dans le forum Administration
    Réponses: 8
    Dernier message: 04/08/2004, 14h36
  3. Differences Stack et Heap
    Par elsargento dans le forum C++
    Réponses: 9
    Dernier message: 26/05/2004, 16h10
  4. Stack overflow
    Par portu dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2003, 15h16
  5. [LG]floation point overflow
    Par mikoeur dans le forum Langage
    Réponses: 8
    Dernier message: 10/07/2003, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo