Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - malloc e l'allocazione dinamica della mamemoria
Forum - C/C++ - malloc e l'allocazione dinamica della mamemoria - Pagina 3

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:49
Giovedì, 22/07/2010
Testo quotato

Postato originariamente da Pitagora:

@nessuno: no :ot:



Non sono OT ... hai proposto tu quel pezzo ... volevo sapere da dove viene ... un libro (non credo) ... quindi?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 22:17
Venerdì, 23/07/2010
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da Pitagora:

@nessuno: no :ot:



Non sono OT ... hai proposto tu quel pezzo ... volevo sapere da dove viene ... un libro (non credo) ... quindi?

è la guida di blacklight !

--------------------------------------------------------

Ho fatto degli esempi per capire meglio l'allocazione dinamica della memoria.

Codice sorgente - presumibilmente C#

  1. 1) int *p = malloc(5 * sizeof(int)); /* alloca 20 byte.  Sarebbe l'equivalente di scrivere: int p[5] (+ o -) */
  2.  
  3. 2) int *p = malloc(sizeof(int)); /* alloca 4 byte. Puà contenere solo un numero */     
  4.  
  5. 3) char *o = malloc(2 * sizeof(char)); /* qui è come se avessi char *o[2] = {"ciao", "non_importa_quanto_sia_grande la_stringa_conta_solo_l'indice_giusto_?", NULL}; */
  6.                 strcpy(o, "ciao");
  7.                 strcpy(*(o + 1), "ciao");
  8.  
  9. 4) char *ca = malloc(7+1); /* adesso posso inizializzare il puntatore *ca con una stringa di 6 caratteri. Il 7° sarà riservato a NULL */
  10.                 strncpy(ca, "ciao_c", 6);



Mi potreste correggere dove ho sbagliato, chiaramente ! ?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:25
Venerdì, 23/07/2010
Testo quotato

è la guida di blacklight !



Non so chi sia, ma se ha scritto void invece di void * (o puntatore a void) è sbagliata e andrebbe corretta ...

Testo quotato


1) int *p = malloc(5 * sizeof(int)); /* alloca 20 byte.  Sarebbe l'equivalente di scrivere: int p[5] (+ o -) */



Sì ...

Testo quotato


2) int *p = malloc(sizeof(int)); /* alloca 4 byte. Puà contenere solo un numero */



Solo un int ... (devi essere preciso ...)

Testo quotato


3) char *o = malloc(2 * sizeof(char)); /* qui è come se avessi char *o[2] = {"ciao", "non_importa_quanto_sia_grande la_stringa_conta_solo_l'indice_giusto_?", NULL}; */
        strcpy(o, "ciao");
        strcpy(*(o + 1), "ciao");



Sbagliato.

Con la prima malloc allochi lo spazio per due caratteri. Ovvero è come se avessi

char o[2];

e non char *o[2]. Ovviamente tutto il resto è sbagliato essendo la stringa "ciao" fatta da 4+1 caratteri

Testo quotato


4) char *ca = malloc(7+1); /* adesso posso inizializzare il puntatore *ca con una stringa di 6 caratteri. Il 7° sarà riservato a NULL */
                strncpy(ca, "ciao_c", 6);



Sbagliato ... Hai scritto 7+1, quindi 7 caratteri più l'ottavo per il NULL ...
(ovvero ... anche 6+1 caratteri ci entrano ma non è chiaro perché tu l'abbia dimensionato con 8 caratteri)


Ultima modifica effettuata da nessuno il 23/07/2010 alle 22:38


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:27
Venerdì, 23/07/2010
Testo quotato

Postato originariamente da Pitagora:

Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da Pitagora:

@nessuno: no :ot:



Non sono OT ... hai proposto tu quel pezzo ... volevo sapere da dove viene ... un libro (non credo) ... quindi?

è la guida di blacklight !

--------------------------------------------------------

Ho fatto degli esempi per capire meglio l'allocazione dinamica della memoria.

Codice sorgente - presumibilmente C#

  1. 1) int *p = malloc(5 * sizeof(int)); /* alloca 20 byte.  Sarebbe l'equivalente di scrivere: int p[5] (+ o -) */
  2.  
  3. 2) int *p = malloc(sizeof(int)); /* alloca 4 byte. Puà contenere solo un numero */     
  4.  
  5. 3) char *o = malloc(2 * sizeof(char)); /* qui è come se avessi char *o[2] = {"ciao", "non_importa_quanto_sia_grande la_stringa_conta_solo_l'indice_giusto_?", NULL}; */
  6.                 strcpy(o, "ciao");
  7.                 strcpy(*(o + 1), "ciao");
  8.  
  9. 4) char *ca = malloc(7+1); /* adesso posso inizializzare il puntatore *ca con una stringa di 6 caratteri. Il 7° sarà riservato a NULL */
  10.                 strncpy(ca, "ciao_c", 6);



Mi potreste correggere dove ho sbagliato, chiaramente ! ?  



quando utilizzi la funzione malloc, esegui sempre un cast implicito; in questo modo:

Codice sorgente - presumibilmente C/C++

  1. ...
  2.  int *p=NULL;
  3.  p=(*int) malloc(sizeof(int)); // alloca lo spazio per un int.
  4.  ...



L' esempio n°3 è totalmente sbagliato; infatti un char può contenere solo un carattere, non una stringa.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:36
Venerdì, 23/07/2010
Testo quotato

Postato originariamente da Poggi Marco:

un cast implicito



cast esplicito ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 8:47
Domenica, 25/07/2010
ok grazie ragazzi adesso ho capito :k:

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo