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

    [c] allocazione di una stringa dinamica

    ragazzi per allocare una stringa dinamica (cioè che poi potrò fare una realloc durante l'esecuzione se mi serve più spazio) come la devo dichiarare?

    char **myStr;

    2 deferenziazioni?


    per quanto riguarda la dichirazione poi dovrebbe essere:
    codice:
    myStr = (char **)calloc(1,sizeof(char));
    
    // altro codice
    
    myStr = (char**)realloc(myStr, 2 * (sizeof(char));

    hm riguardando non penso proprio sia corretto...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    No, perché mai dovresti dichiararla come puntatore a puntatore? Devi dichiarare un puntatore singolo, non capisco quale sia il problema...
    every day above ground is a good one

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [c] allocazione di una stringa dinamica

    Originariamente inviato da xnavigator
    ragazzi per allocare una stringa dinamica (cioè che poi potrò fare una realloc durante l'esecuzione se mi serve più spazio) come la devo dichiarare?
    Non hai ancora assimilato il concetto di semplice puntatore ... ti consiglio di fermarti ancora un po' a studiarlo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Originariamente inviato da YuYevon
    No, perché mai dovresti dichiararla come puntatore a puntatore? Devi dichiarare un puntatore singolo, non capisco quale sia il problema...
    perchè una stringa sarebbe un array e quindi un puntatore, e dovendolo fare dinamico mi serve un puntatore a quest'array di char no ?

    grazie per le spiegazioni ( anche se vedo che arrivano con il contagoccie )

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da xnavigator
    perchè una stringa sarebbe un array e quindi un puntatore, e dovendolo fare dinamico mi serve un puntatore a quest'array di char no ?
    No.

    Se e' gia' un puntatore, non ha senso farlo doppio.

    ( anche se vedo che arrivano con il contagoccie )
    Probabilmente perche' sarai in ritardo con il pagamento del servizio ....
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Originariamente inviato da oregon
    No.

    Se e' gia' un puntatore, non ha senso farlo doppio.
    bhè allora forse mi sfugge qualcosa:

    io creo la variabile char *myVar;

    viene allocata in una parte della memoria 4byte per il puntatore ad un char.
    per allocare il primo char faccio:

    myVar = (char *) malloc(sizeof(char));
    a questo punto posso settare il mio primo carattere facendo:

    myVar[0] = 'a';

    ora mettiamo che nell'esecuzione del codice setto altre variabili dinamiche, queste variabili dinamiche verranno allocate proprio dopo l'indirizzo di memoria del primo elemento myVar[0]

    e quindi se vorrò reallocare myVar per permettermi di salvare un nuovo carattere myVar[1]='b';

    non potrò farlo perchè quell'indirizzo di memoria dopo myVar[0] sarà stato allocato per quelle altre variabili dinamiche...

    giusto?

    forse la risposta sta nel fatto che le diverse variabili dinamiche non sono allocate tutte consecutivamente ma in diversi spazi di memoria preservando l'eventuale aritmetica dei puntatori...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da xnavigator
    bhè allora forse mi sfugge qualcosa:
    ...
    non potrò farlo perchè ...
    giusto?
    Sbagliato ...

    La malloc provvede ad allocare lo spazio iniziale necessario.

    Se chiami la realloc, questa provvede ad allocare lo spazio richiesto. Se non puo' farlo dopo lo spazio gia' allocato, riserva un altro opportuno blocco muovendo i dati dal precedente.

    In pratica, non ti devi curare di questo aspetto perche' ci pensa la realloc.

    Ma cosa c'entra tutto cio' con i doppi puntatori?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Originariamente inviato da oregon


    Se chiami la realloc, questa provvede ad allocare lo spazio richiesto. Se non puo' farlo dopo lo spazio gia' allocato, riserva un altro opportuno blocco muovendo i dati dal precedente.
    dannazione... questo piccolo particolare mi era sfuggito

    Ma cosa c'entra tutto cio' con i doppi puntatori?
    il doppio puntatore avevo pensato di farlo cosi per avere un array di puntatori a char, cosi
    da avere i char veri e propri spari per la memoria (per non incorrere in quel problema che avevo detto prima) e l'array di puntatori che puntava ai vari char sparsi in mem

    non c'è ne bisogno ci pensa la realloc

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da xnavigator
    dannazione... questo piccolo particolare mi era sfuggito
    ...
    non c'è ne bisogno ci pensa la realloc
    Forse questo succede perche' non studi la documentazione ...

    http://www.cplusplus.com/reference/c...tdlib/realloc/
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10

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.