Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194

    [C] Problema con sizeof()

    Posto subito il codice
    codice:
            int *pippo;
    	pippo=malloc(sizeof(int)*2);
    	printf("%d", sizeof(pippo));
    Con quel printf mi aspettavo di vedere stampato 8 (4 byte per intero), invece stampa 4.

    Come faccio ad avere l'effettiva grandezza dello spazio puntato da pippo?

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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' giusto che sia cosi' ...

    Quale compilatore usi ?

  3. #3
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194
    Uso il compilatore di visual c++.
    Sì di sicuro è giusto, infatti sono io che non capisco bene come funziona. Quello che penso è che il compilatore assegna un certo spazio ai tipi int * e che con quella sizeof che ho fatto io vedo stampato la grandezza di tale tipo. Ma allora come faccio a ricavarmi la grandezza dello spazio di memoria puntata pippo?
    "There is no dark side of the moon really. Matter of fact it’s all dark."

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il codice corretto e' questo

    int *pippo;
    pippo = (int *)malloc(sizeof(int)*2);
    printf("%d", _msize(pippo));
    free(pippo);

    Ti faccio notare che

    1) la malloc restituisce un puntatore a void; per evitare il relativo warning e' necessario indicare il cast a (int *)

    2) la sizeof restituisce la grandezza dell'elemento che hai passato. Se hai passato pippo, restituisce la grandezza di un puntatore. In Win32 un puntatore e' sempre di 4 byte, a prescindere a cosa punti.

    3) se passassi *pippo alla sizeof, questa ti restituirebbe la grandezza del tipo di dato puntato da pippo (4 per un int, 2 per uno short ...) ma non la grandezza del buffer allocato

    4) per fare quanto chiedi, in VC e' necessario utilizzare la funzione _msize a cui passerai il puntatore all'area (non e' una funzione standard ... con Linux, mi sembra, puoi utilizzare la funzione malloc_size)

  5. #5
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194
    Il punto 1 già lo sapevo, ma mi ero scordato di fare il casting
    Comunque mi hai chiarito molti dubbi e in effetti con quella _msize funziona. Ti ringrazio molto gentile.
    "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 © 2025 vBulletin Solutions, Inc. All rights reserved.