Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194
    Sai spiegarmi bene mi rimane difficile perchè tutto il codice sono circa 481 righe, allora sto cercando di sintetizzare solo le parti in cui "suppongo" sia l'errore.
    Comunque, cercando di riassumere:
    Ho un array globale di short (o meglio un puntatore a short):

    short *verso;

    lo alloco con malloc:

    verso = (short *) malloc(sizeof(short) * n);

    lo inizializzo con interi letti da file:

    fscanf(fp, "%d", &verso[i]); // la i è l'indice all'interno di un for che cicla fino a i<n

    alla fine del main faccio la free:

    free(verso);

    Facendo così ho l'errore della free(), altrimenti, riagganciandomi al post precedente dove utilizzo una variabile di appoggio, non ho problemi.
    Scusate ho fatto confusione, ma quando non si sa bene dove sia l'errore è difficile anche inventarsi un titolo esatto per la discussione. :berto:
    "There is no dark side of the moon really. Matter of fact it’s all dark."

  2. #12
    Quale errore ?

    P.S.: la fscanf la puoi riscrivere così:
    codice:
    fscanf(fp, "%d", verso + i);

  3. #13
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194
    Utilizzando l'aritmetica dei puntatori che mi hai detto tu Menphisx, ottengo comunque l'errore alla free.
    Solo usando la variabile di appoggio non ho problemi.
    :master:
    "There is no dark side of the moon really. Matter of fact it’s all dark."

  4. #14
    Ma che ERRORE ti DA la FREE ?
    Puoi postare il CODICE COMPLETO ?

  5. #15
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194
    Come ho detto il codice completo è circa 480 righe.
    Comunque non appena viene eseguita la free ottengo un:

    Debug error!

    HEAP CORRUPTION DETECTED

    il messaggio non è completo, ma in pratica mi viene detto che vado a scrivere dopo la fine dello heap buffer.
    A questo punto posso immaginare che forse sia la modalità debug ad avere, come ha detto oregon, delle particolarità. Però credo che tutto debba funzionare correttamente in qualsiasi modalità.
    "There is no dark side of the moon really. Matter of fact it’s all dark."

  6. #16
    Significa semplicemente che utilizzi più memoria di quella disponibile.
    Se non posti un po' di codice, non so' come aiutarti.


  7. #17
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da sky_451
    Come ho detto il codice completo è circa 480 righe.
    Comunque non appena viene eseguita la free ottengo un:

    Debug error!

    HEAP CORRUPTION DETECTED

    il messaggio non è completo, ma in pratica mi viene detto che vado a scrivere dopo la fine dello heap buffer.
    A questo punto posso immaginare che forse sia la modalità debug ad avere, come ha detto oregon, delle particolarità. Però credo che tutto debba funzionare correttamente in qualsiasi modalità.
    Forse prima non mi sono spiegato ...

    In modalita' debug vengono effettuati dei CONTROLLI maggiori sulla scrittura dei buffer allocati perche' la malloc e la free sono PARTICOLARI. Tutto cio' avviene proprio perche' in fase di debugging e' bene controllare meglio tutti i possibili problemi.

    Cio' NON AVVIENE in modalita' Release perche' tali controlli sono "pesanti" e ridurrebbero le performance del programma. Del resto, se si passa alla Release per distribuire il software, si da' per SCONTATO che il programma non abbia di questi problemi perche' ha superato la fase di debugging (e in modalita' debug non ha dato piu' errori).

    L'errore

    HEAP CORRUPTION DETECTED

    che ti viene mostrato in modalita' debug, indica che in una o piu' parti del codice (come ti avevo gia' detto) hai scritto OLTRE la fine di un buffer allocato in precedenza (in genere, se accedi con un indice in un vettore, il valore dell'indice in qualche caso, ha superato il massimo allocato).

    Il fatto di usare una variabile temporanea di TIPO DIVERSO da quelle del vettore, potrebbe essere la causa del fatto che il problema non ti si presenta. Infatti, se il valore letto dal file non e' uno

    short

    la fscanf potrebbe 'sporcare' il buffer allocato solamente per degli short. La variabile temporanea e' una

    int

    e quindi non hai problemi dato che l'assegnazione successiva viene fatta dal compilatore con apposite conversioni implicite.

    Per rimediare senza usare la variabile temporanea, prova ad allocare un buffer di interi con

    codice:
    int *verso;
    verso = (int *) malloc(sizeof(int) * n);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #18
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194
    Ti ringrazio oregon. Ora penso di aver capito. Usando un array di interi come giustamente hai detto, non c'è nessun problema.
    Grazie anche a Menphisx per l'aiuto.

    "There is no dark side of the moon really. Matter of fact it’s all dark."

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.