Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C++] Crash al termine del main

    Qualcuno sa spiegarmi perché siffatta funzione provoca un crash alla fine del main? Tutto viene eseguito correttamente, ma quando termino il programma va in crash.
    Il programma consiste nel trasferire su un file binario le informazioni relative a degli oggetti(serializzazione).

    Funzione serial:
    codice:
    bool serialize(const buffer & filepath,const PilaPacchi P,const int n){
         ptr papp=P.getL();
         char * app;
         int scrv;
         float fapp;
         
         ofstream out(filepath,ios::out|ios::binary);
         if(!out) return false;
         else{
              int count=n;
              out.write((char *)&count,sizeof(int));
              for(int i=0;i<count;i++){
                      scrv=papp->E.getC();
                      out.write((char *)(&scrv),sizeof(int));
                      fapp=papp->E.getKG();
                      out.write((char *)(&fapp),sizeof(float));
                      writeS(out,papp->E.getI());
                      delete [] app;
                      papp=papp->next;
                      }
              out.close();
              return true;
              }
         }
    Funzione writeS che viene richiamata da serial:
    codice:
    void writeS(ofstream & out,const char * b){
         int s = strlen(b);
         out.write((char *)&s,sizeof(int));
         out.write(b,s);
         }
    Oggetto PaccoPostale:
    codice:
    class PaccoPostale{
          friend ostream& operator<<(ostream&,const PaccoPostale &);
          friend istream& operator>>(istream&,PaccoPostale &);
          protected:
                 float peso;
                 int codice;
                 char * indirizzo;             
                 virtual ostream& print(ostream&) const;
                 virtual istream& leggi(istream&);
          public:
                 //costruttori
                 PaccoPostale(): peso(0), codice(0), indirizzo("") {}
                 PaccoPostale(const float,const int,char *);
                 PaccoPostale(const PaccoPostale &);
                 
                 //distruttore
                 ~PaccoPostale();
                 
                 //func
                 void print() const;
                 
                 //overload
                 PaccoPostale & operator=(const PaccoPostale &);
                 
                 //sets
                 void setC(const int c) { codice=c; }
                 void setP(const float p) { peso=p; }
                 void setI(char * c) { allocaCC(indirizzo,c); }
                 
                 //gets
                 const int getC() const { return codice; }
                 const float getKG() const { return peso; }
                 const char * getI() const { return indirizzo; }
          };
    Oggetto PilaPacchi
    codice:
    struct record;
    
    typedef record * ptr;
    
    typedef struct record{
            PaccoPostale E;
            ptr next;
            };
    
    class PilaPacchi: public PaccoPostale{
          private:
                 ptr l;
                 friend istream& operator>>(istream &,PilaPacchi &);
          public:
                 //costruttore
                 PilaPacchi(): l(0) {}
                 
                 //pop,push,top
                 void push(const PaccoPostale &);
                 PaccoPostale& pop();
                 PaccoPostale& top() const;
                 
                 //isfull,isempty
                 bool isfull() const { return false; }
                 bool isempty() const { return l==0; }
    
                 //stampa
                 void stampa();
                 
                 //leggi da file
                 bool deserialize(const buffer &) throw(FileExcept);
                 
                 //distruttore
                 ~PilaPacchi();
                 
                 //get
                 const ptr getL() const { return l; }
                 
                 //
                 void setL(ptr p) { l=p; }
          };
          
    bool serialize(const buffer &,const PilaPacchi,const int);
    In teoria tutte le funzioni sono funzionanti (le ho provate tutte), crasha solo quando uso serialize e alla fine del programma, quindi esegue la funzione correttamente ma provoca un crash del main quando questo termina.
    Idee?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Togliere quel
    codice:
    delete [] app;
    che non inizializzi, non usi e che cancelli count volte, corrompendo l'heap.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.