Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258

    [C] utilizzare la farmalloc

    Uso il TurboC della Borland.

    Dato che devo salvare una pagina grafica di 640 x 350, pensavo di usare la malloc ma... SORPRESA! La malloc non alloca più di 64 kB... e ne servono + o - 224...

    Allora trovo la farmalloc ma... non riesco a farla funzionare!

    per provare ho scritto questo codice:


    void huge *punt;

    main()
    {
    if ((punt = (void huge *)farmalloc(70*70))==NULL)
    printf ("err");
    else
    {
    farfree (punt);
    printf ("ok");
    }
    }


    E sapete qual è l'output? Questo:
    errerrerrerrerrerrerrerrerrerrerrerrerrerrerrerrer rerrerrerrerr

    ecc ecc ecc...

    Qualche ideuzza?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Utilizza un puntatore a char

    char huge *punt;

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    il codice diventa quindi

    char huge *punt;

    main()
    {
    if ((punt = (char huge *)farmalloc(70*70))==NULL)
    printf ("err");
    else
    {
    farfree (punt);
    printf ("ok");
    }
    }

    se si non funziona ancora...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Spiega un po' il contesto del tuo programma ... stai lavorando in DOS?

    E perche' allochi solamente 4900 byte (70*70)? E' solamente per prova?

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    si, in dos.

    devo fare un programma con un'animazione a schermo intero (VGAMED, quindi 640 x 350).
    le bmp che compongono le immagini sono salvate in un file.
    il programma legge un'immagine dal file e la mette sullo schermo in modalità grafica.
    Con la putpixel ci mette una vita. allora ho usato la putimage. Però questa ha bisogno di un pò di memoria allocata.
    Con la malloc si possono allocare al max 64kB.

    Comunque questo è un altro programma. In questo codice voglio solo vedere come funziona la farmalloc.
    Si, 70 x 70 è per fare una prova (dato che la malloc li alloca...)

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non posso fare delle prove perche' non dispongo del compilatore in questione.

    Dalla documentazione letta su internet, il puntatore deve essere di tipo far, quindi

    char far *punt;

    Ma non mi sembra questo il problema ... non so quale modello di compilazione hai usato ma ovviamente il "tiny model" non va bene ... controlla quale modello utilizzi ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    Ho provato con small, large e huge model.
    i puntatori li ho usati di tipo char far * e char *far *.

    Niente di niente...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Questo codice (large model e con gli include corretti)

    codice:
    char far *punt;
    
    main()
    {
      punt = (char far *)farmalloc(1000);
    
      printf ("%d", punt);
    }
    cosa scrive a video?

    P.S. So che la farmalloc ha problemi se utilizzata nell'IDE ma funziona nell'exe ... tu stai provando dall'IDE o compili ed esegui il .exe?

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    gli include dovrebbero essere corretti.....................

    Aspetta.....

    include <alloc.h>
    E tutto funziona...........

    Ma scusa, se non gli includo il file degli header non mi dovrebbe dire qualcosa tipo "Non trovo la funzione"?

    Comunque ora va... Grazie

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Davo per scontato che tu avessi incluso la alloc.h ...

    Molto probabilmente, in assenza dell'include, la farmalloc viene rimappata sulla malloc ...

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.