Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [delphi] out of memory?

    ciao ragazzi mi sapreste fornire un aiuto...ho creato un lettore di data element di un file dicom....praticamente ho creato un oggetto che ha come attributo un array di record.
    Ogni record contiene tre variabgili string.
    Ho poi implementato una classe di prova per visualizzare tale elenco di elementi...nel componente Tmemo...alcuni file me li apre, crea l'oggetto, e alla fine visualizza elenco, mentre per altri file esce questa eccezzione:

    Project Project1.exe raised exception class EOutOfMemory with message 'Out of memory'. Process stopped. Use Step or Run to continue.

    Domanda: tale eccezzione è dovuta al fatto che il componente Tmemo ha una dimensione max di scrittura oppure devo cercare da qualche altra parte? ( in teoria l'algoritmo se funziona per alcuni file dovrebbe funzionare anche per gli altri)...
    sapete darmi indicazioni su questo tipo di exception?
    re dei giovani

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Non so se si tratta del tuo problema, ma so per certo che il controllo TMemo possiede una limitazione di 64KByte, sicura su alcuni sistemi operativi (es. Windows 98), probabile per Windows 2000 e XP.

    Prova ad utilizzare un TRichEdit al suo posto.

    Nel caso in cui il problema non sia risolto, valuta l'efficienza e la correttezza della struttura dati personalizzata che ti sei costruito per leggere i file, di cui non conosco il formato.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    ..ancora ciao...
    ho provato a utilizzare il componente che mi hai consigliato, ma ora mi da un eccezione di questo tipo :

    ...Eaccesviolation with message "Acces Violation at address 004990496A in module
    'openFileProject.exe'. Read of address 00001FFC'...

    e quando clicco ok il compilatore evidenzia la riga in cui scrivo le stringhe nel record che poi forma l'elemento i-esimo del mio array....
    re dei giovani

  4. #4
    sarebbe meglio postassi il codice... la descrizione nn fa capire un granchè.
    Di solito comunque un access violation è dovuto a quando cerchi di accedere a qualcosa che ancora non esiste...


  5. #5
    ..........tra l'altro, anche per quei file per i quali usando componente Tmemo veniva visualizzato elenco dei tag, ora generano questa exception...
    ....non riesco a postarvi codice perchè sono più classi e occuperebbe troppo....
    re dei giovani

  6. #6
    se nn hai cambiato altro tranne sostituire il Tmemo con il TRichEdit l'unica cosa che mi viene in mente e che tu stia provando ad accedere al componente con un findcomponent passandogli la proprietà "name" errata, oppure tu faccia un Typecast non corretto...
    oppure venga scatenato qualche evento che non dovrebbe essere scatenato...

    Senza altri indizi nn saprei proprio


  7. #7
    .....ora vi faccio vedere la procedura che ho scritto nel main ...utilizzando TRichEdit....

    procedure TForm1.Button1Click(Sender: TObject);


    type dicom = File;

    var name: dicom;

    dimensioneDataSet,i:Integer;

    begin

    OpenDialog.Filter := 'Dicom Images|*.*';
    if OpenDialog.Execute then begin

    OpenDialog.InitialDir := extractfiledir(OpenDialog.FileName);
    Label1.Caption:=OpenDialog.fileName;

    AssignFile(name,OpenDialog.fileName);
    Reset(name,1); // 1 byte alla volta
    try
    dicomfile:=Tdicomdata.Create( name ); // crea oggetto dicomfile che contiene array
    dimensioneDataSet:=dicomfile.getdatasize; // torna dim. array di record
    for i:=0 to (dimensionedataset-1) do
    begin
    RichEdit1.Lines.Add(dicomfile.getdataDescriptionel ement(i)); // stampa ogni elemento dell'array ( la funzione chiamata da come risultato un'unica stringa con le tre stringhe che compongono record)

    end;

    finally
    closefile(name);
    end;



    end;


    end;


    in teoria quindi nell''eseguibile cliccO sul bottone nel form scelgo il file da aprire e dovrei avere come risultato un elenco nella parte out (componente TRichEDit...) il problema è che mi genera quella dannata exception ...anche con quei file che per cui non me la dava se usavo Tmemo al posto di TrICHeDIT...STO FORSE USANDO MALE QUESTO COMPONENTE..
    re dei giovani

  8. #8
    ...SCUSATE IL LINGUAGGIO E LA GRAMMATICA DA SCHIFO MA SONO COSI' INCASINATO CHE QUASI DIVENTO DISLESSICO....
    re dei giovani

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da re dei giovani
    ..........tra l'altro, anche per quei file per i quali usando componente Tmemo veniva visualizzato elenco dei tag, ora generano questa exception...
    ....non riesco a postarvi codice perchè sono più classi e occuperebbe troppo....
    Come ti è stato suggerito, si verifica un Access Violation quando si tenta di accedere ad una locazione di memoria non assegnata (ad esempio, creando un oggetto) o tentando di accedere ad una locazione non più valida (poiché l'oggetto a cui si fa riferimento è stato distrutto) oppure perché il riferimento non è stato inizializzato.

    A parte questo, credo che mescolare record, classi, array sia un gran casotto.

    Si dovrebbero utilizzare strutture di livello più altro, come liste (TList), e codificare attentamente e nel modo formalmente corretto le istruzioni di creazione degli oggetti e inserimento nella lista.

    Purtroppo, senza vedere uno stralcio di codice, non è possibile dire molto di più.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    a vederlo così nn sembra un problema dovuto al richedit (sempre ammesso che sia non sia "nil")...
    piuttosto secondo me è un problema della tua classe.
    In ogni caso se vuoi un consiglio non chiamare una variabile "name".


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