Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Malloc e Realloc (Help Problemi) ???

    Come mai se faccio girare questo programma il sizeof di test mi
    rimane sempre uguale a 4...?
    non dovrebbe aumentare ???

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
       unsigned int *test;
       unsigned int i;
    
       test = (unsigned int *) malloc (sizeof(unsigned int));
       printf ("sizeof(test) : %d \n", sizeof(test));
    
       for (i=1; i < 10; i++) {
    	test = (unsigned int *) realloc (test, i*sizeof(unsigned int));
    	printf ("sizeof(test) : %d \n", sizeof(test));
       }
    
       free (test);
    
       getchar();
       return 0;
    };
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    credo perchè comunque il tipo di dato puntato da test è sempre lo stesso (un unsigned int), e sizeof ritorna lo spazio riservato per una variabile di tale tipo, indipendentemente di quanto spazio hai allocato. Se no in questo modo sarebbe possibile sapere sempre quanti elementi ci sono in un array perchè basterebbe usare questa funzione e dividere il risultato per la dimensione del tipo.

  3. #3
    Io Posso trovare quanti elementi ha un array con sizeof() !!!!

    codice:
    ...
    int myArray[10];
    int componenti = sizeof(myArray)/sizeof(myArray[0]);
    
    printf ("Il Mio Array Occupa %d Byte", sizeof(myArray));
    printf (" e ha %d Componenti", componenti);
    ...
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Hai ragione, questo significa che la sizeof si comporta diversamente con array e puntatori, in effetti array e puntatori sono simili ma non sono la stessa cosa, difatti un array è un puntatore costante ad una zona di memoria e non puo essere modificato, a differenza di un generico puntatore. Evidentemente il compilatore considera la variabile array come la variabile che comprende tutto lo spazio allocato quando dichiari l'array, a differenza di quando invece allochi spazio per un puntatore.

  5. #5
    test è 1 puntatore-->occupa sempre 4 byte (quasi)
    unsigned int è 1 int-->occupa 4 byte

  6. #6
    Quindi io non posso sapere quanta memoria ho allocato ???
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

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.