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

Delphi Discussion :

Débordement de pile


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Débordement de pile
    bonjour,

    je suis actuellement devant un probleme de debordememt de pile. Je suis en train d etudier le tutorial sur la recursivite comme conseillé pour ce genre de probleme dans une discussion datant de 2005 sur ce probleme mais je ne voit pas d ou cela peu venir !

    voici mon code, si quelqu un voit d ou peu venir le probleme....
    Lors de l execution du programme, le debordememt est signale avant meme l ouverture de l opendialog.

    merci a tous.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    unit syncro_time;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls
     
     
    type
      TForm1 = class(TForm)
        OpenDialog1: TOpenDialog;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);                  // table pointer
     
     
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
      n: integer  ;
      synchrotime, nosynchrotime : textfile ;
     
     
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm1.Button1Click(Sender: TObject);
     
    const
     
      column = 3 ;
      line = 50000 ;
     
    type
     
    Table = array [0..line,0..column] of real ;
     
    var
     
      n : integer ;
      T : table ;
      tmps1,tab,column2,column3 : string;
      i,j,postab,long : integer ;
     
     
     
    begin 
    if opendialog1.execute then
        Assignfile (nosynchrotime,'C:\Documents and Settings\ATOFI005\My Documents\Delphi\nosynchrotime.txt');
        reset(nosynchrotime);
        n := 0  ;
      repeat;
      inc(n);
      readln(nosynchrotime);
      until eof(nosynchrotime);
      Assignfile (synchrotime,'C:\Documents and Settings\ATOFI005\My Documents\Delphi\synchrotime.txt');
      rewrite (synchrotime);
      readln(nosynchrotime,tmps1);
      writeln ( synchrotime, 'system time',tmps1) ;
      for i := 1 to n do begin
          j:=2 ;
          readln(nosynchrotime,tmps1);
          tab := '#9' ;
          postab := pos(tab,tmps1);
          column2 := copy (tmps1,1,postab) ;
          T[i,j]:= strtofloat(column2) ;
          long := length(tmps1) ;
          column3 := copy(tmps1,postab,long);
          T[i,j+1]:= strtofloat(column3) ;
          writeln (synchrotime, ' ',#9, T[i,j],#9,T[i,j+1]) ;
      end;
      closefile(nosynchrotime);
      closefile(synchrotime);   
    end;
    end.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Points : 125
    Points
    125
    Par défaut
    as tu fait un debogage pour voir si ton code ne reste pas dans tes boucles

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Bonjour,

    perso, je sortirais la déclaration de la table pour la mettre en global car tu arrives à 51000 lignes * 4 colonnes * size(real) = 51000*4*6 octets

    EDIT : et en plus j'ai les yeux collés car je ne vois pas le rapport avec la récursivité dans ton exemple.

  4. #4
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    Quelqu'un pourait-il mettre des balises au code du monsieur ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    dsl pour l affichage du code, j avais pas vu. Je veu bien mettre moi meme les balises, mais j ignore comment faire....
    et puis moi c est mademoiselle

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Pour la recursivite : j ai lu dans une autre discussion (toujours celle de 2005), que les debordement de pile etaient souvent du a l'abscence de condition d arret dans une procedure recursive. Peut il y avoir d autre cause?
    merci encore

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    oui mademoiselle : quand tu demandes trop de mémoire en déclarant une GROSSE table en local.
    Tu devrais déclarer ton type table et ta variable T juste au-dessus de IMPLEMENTATION...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Tu as aussi oublié un begin (et son end) après ton opendialog1.execute car dans ton exemple tu feras le reset(nosynchrotime) même si tu ne sélectionnes aucun fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    begin 
    if opendialog1.execute then
    BEGIN  <---------------------------------------
      Assignfile (nosynchrotime,'C:\Documents and Settings\ATOFI005\My Documents\Delphi\nosynchrotime.txt');
      reset(nosynchrotime);
      n := 0 ;
      repeat;
      inc(n);
      readln(nosynchrotime);
      until eof(nosynchrotime);
      Assignfile (synchrotime,'C:\Documents and Settings\ATOFI005\My Documents\Delphi\synchrotime.txt');
      rewrite (synchrotime);
      readln(nosynchrotime,tmps1);  
      writeln ( synchrotime, 'system time',tmps1) ;
      for i := 1 to n do begin
      j:=2 ;
      readln(nosynchrotime,tmps1);
      tab := '#9' ;
      postab := pos(tab,tmps1);
      column2 := copy (tmps1,1,postab) ;
      T[i,j]:= strtofloat(column2) ;
      long := length(tmps1) ;
      column3 := copy(tmps1,postab,long);
      T[i,j+1]:= strtofloat(column3) ;
      writeln (synchrotime, ' ',#9, T[i,j],#9,T[i,j+1]) ;
      end;
      closefile(nosynchrotime);
      closefile(synchrotime); 
    END; <-----------------------------------------
    end;

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    merci !!

    grace a votre science l erreur a miraculeusement disparu , meme si oui je sais, il n'y a pas de miracle en programmation !
    ca tourne pas encore, mais c deja bien mieux ! merci a tous !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Et c'était quoi le miracle ?

  11. #11
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    de declarer mon tableau avant l'implementation.....
    et oui, une erreur de débutante....mais dur dur pour moi le delphi, c est pas du tout mon domaine et formation...
    donc debut laborieux, heureusement qu il y q des gens sympas sur le forum...
    merci encore !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Me concernant, ça fait 15 ans que je débute

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2008, 20h20
  2. [WIN32][D7][DLL] Erreur: débordement de pile !
    Par hepha1970 dans le forum Débuter
    Réponses: 5
    Dernier message: 17/12/2007, 02h41
  3. Réponses: 14
    Dernier message: 14/12/2006, 09h34
  4. Débordement de pile
    Par portu dans le forum Delphi
    Réponses: 9
    Dernier message: 28/06/2006, 14h58
  5. Réponses: 7
    Dernier message: 10/01/2006, 21h58

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