Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    84

    [C++] std::vector access violation all'apertura del file

    CIao a tutti
    Succede che inserisco dei dati, li salvo e se li riapro ci stanno, mentre se chiudo il programma e voglio aprire lo stesso file contenente i miei dati dice access violation e non apre niente
    codice:
    if(!OpenDIalog->Execute()) return ;
    AnsiString nf=OpenDialog->FileName;
    File* f=fope(nf.c_str(), "rb");
    
    if(!f) return ;
    int dim=vec.size();
    fread(&dim, sizeof(int),1,f);
    for (int i=0; i<dim;i++)
    vec[i]->ReadFromFile(f);
    fclose(f);
    Da debug vedo che si blocca alla riga vec[i]->ReadFromFile(f);...non entra proprio nella funzione di ReadFromFile()...Ho pensato che si tratti di un problema di allocazione del vector..Ho provato con la resize() ma nulla.
    Di solito con un array * faccio la calloc subito dopo fread()...

  2. #2
    Manca troppa roba per capirci qualcosa, e il codice che hai postato ha anche errori di sintassi grossolani, difficile capirci qualcosa. Posta un esempio minimale compilabile (http://sscce.org/).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    84
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Manca troppa roba per capirci qualcosa, e il codice che hai postato ha anche errori di sintassi grossolani, difficile capirci qualcosa. Posta un esempio minimale compilabile (http://sscce.org/).
    Al di la di questo, vorrei capire come salvare e aprire file con std::vector...
    Al momento ho std::vector vec in cui inserisco i miei elementi tramite form di inserimento da me creata.
    Poi vorrei avere la possibilità di salvare questi dati per servirmene quando voglio, senza stare ogni volta ad inserirli. Quella sopra scritta è cosa succede al click del tasto Apri nel mio menù.
    codice:
    if(!OpenDialog->Execute()) return ;
    AnsiString nf=OpenDialog->FileName;
    FILE* f=fopen(nf.c_str(), "rb");
    
    if(!f) return ;
    int dim=vec.size();
    fread(&dim, sizeof(int),1,f);
    for (int i=0; i<dim;i++)
    vec[i]->ReadFromFile(f);
    fclose(f);
    Lavoro su un pc non in rete quindi gli errori di sintassi sono dovuti a questo, chiedo scusa.
    Ho pensato ad errore di allocazione del vector vec.
    La ReadFromFile() è fatta cosi:
    codice:
    fread(nome,sizeof(char),255,f);
    fread(&tipo,sizeof(int),1,f);
    fread(&n,sizeof(int),1,f);
    Ultima modifica di user1989; 05-08-2016 a 09:40

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    84
    Quote Originariamente inviata da user1989 Visualizza il messaggio
    Al di la di questo, vorrei capire come salvare e aprire file con std::vector...
    Al momento ho std::vector vec in cui inserisco i miei elementi tramite form di inserimento da me creata.
    Poi vorrei avere la possibilità di salvare questi dati per servirmene quando voglio, senza stare ogni volta ad inserirli. Quella sopra scritta è cosa succede al click del tasto Apri nel mio menù.
    codice:
    if(!OpenDialog->Execute()) return ;
    AnsiString nf=OpenDialog->FileName;
    FILE* f=fopen(nf.c_str(), "rb");
    
    if(!f) return ;
    int dim=vec.size();
    fread(&dim, sizeof(int),1,f);
    for (int i=0; i<dim;i++)
    vec[i]->ReadFromFile(f);
    fclose(f);
    Lavoro su un pc non in rete quindi gli errori di sintassi sono dovuti a questo, chiedo scusa.
    Ho pensato ad errore di allocazione del vector vec.
    La ReadFromFile() è fatta cosi:
    codice:
    fread(nome,sizeof(char),255,f);
    fread(&tipo,sizeof(int),1,f);
    fread(&n,sizeof(int),1,f);

    Ho risoloto da sola.
    A mali estremi , estremi rimedi.
    Ho fatto così:
    codice:
    if(!OpenDialog->Execute()) return ;
    AnsiString nf=OpenDialog->FileName;
    FILE* f=fopen(nf.c_str(), "rb");
    
    if(!f) return ;
    TIPO * a;
    int dim;
    fread(&dim, sizeof(int),1,f);
    
    for (int i=0; i<dim;i++)
    {
    a->ReadFromFile(f);
    vec.push_back(a);
    }
    fclose(f);

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.