Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211

    [c++] Come si fa a sapere la grandezza di un array?

    Ho un array di questo genere:
    int n;
    cin>>n;
    int* Arr=new int[n];

    Come posso sapere la grandezza dell'array sapendo che poi n cambia valore?
    Mi ricordavo che si faceva cosi', ma non funziona.
    int Len=sizeof(Arr)/ sizeof(int);
    Esiste un modo o bisogna utilizzare una variabile sempre?

  2. #2
    Bisogna usare una variabile; il metodo che dici funziona solo con array statici, di cui il compilatore conosce la dimensione a compile-time.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    codice:
    int len(int *array){
       int l;
       for(; *array; array++){
          l++;
       }
       return l;
    }

  4. #4
    E se nell'array ci fossero degli zeri? Inoltre la memoria allocata con new non è necessariamente riempita con zeri, anzi, in modalità di debug Visual C++ inserisce il valore CD in ogni byte per scopi di debug... per cui...
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non esiste un metodo nello standard ANSI C.

    Pero' parecchi compilatori implementano la funzione _msize che puoi usare in questo modo.

    #include <malloc.h>

    size_t len = _msize(Arr) / sizeof(int);

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Se si usa il C++ si può fare una funzione globale coi template..
    codice:
    template <class T>
    int LenOf(T *pointer)
    {
       return sizeof(pointer) / sizeof typeid(T);
    }
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Assolutamente no: il codice che hai postato divide la dimensione di un puntatore (tipicamente 32 bit, ossia 4 byte) per il suo tipo. Il risultato è un numero che non vuol dire niente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Sono proprio un gran contadino in C.
    Scusate.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211
    Quindi l'unica soluzione è questa:

    #include <malloc.h>

    size_t len = _msize(Arr) / sizeof(int);

    Sempre che sia disponibile.In c++ 2005 si puo'...Grazie per l'illuminazione Oregon!

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.