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++ - Ritornare un puntatore ad una stringa senza deallocarla
Forum - C/C++ - Ritornare un puntatore ad una stringa senza deallocarla - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:02
Giovedì, 21/01/2016
Grazie della spiegazione TheDarkJuster

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:46
Giovedì, 21/01/2016
A parte la teoria di base sui puntatori, la questione che stai affrontando è la posizione in cui allocare i buffer di memoria che ti servono.

Puoi

1) allocare il buffer prima di chiamare la funzione e liberarla dopo la sua chiamata quando non se ne ha più bisogno (la responsabilità di allocare/liberare la memoria è del "chiamante")

2) effettuare l'allocazione all'interno della funzione e liberarla dopo la sua chiamata quando non se ne ha più bisogno (la responsabilità di allocare è della funzione e di liberare la memoria del chiamante)

Tutti e due i metodi sono accettabili, basta che la cosa sia documentata. Ad esempio, Windows presenta delle API che si comportano in un modo e API che si comportano nell'altro.


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
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:46
Giovedì, 21/01/2016
Oh, di niente.

Se hai bisogno di altro chiedi pure.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 10:10
Venerdì, 22/01/2016
Grazie ad entrambi,
penso che sceglierò la 1° soluzione nessuno, avere allocazione/deallocazione nella stessa funzione mi sembra più "ordinato".
a proposito di API, se posso chiederlo qui, ok, altrimenti faccio un'altro tread, no problem:

Qualche buona guida?(conosco le MSDN e le consulto, ma in giro c'è altro fatto più alla mano?)
oppure visto che sono prerogativa di windows, sarebbe opportuno andare su funzioni e librerie dello standard?

Stessa cosa per le system() , molti le sconsigliano a favore delle API. avete delucidazioni in merito?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:31
Venerdì, 22/01/2016
Testo quotato

Postato originariamente da Mikelius:

Grazie ad entrambi,
penso che sceglierò la 1° soluzione nessuno, avere allocazione/deallocazione nella stessa funzione mi sembra più "ordinato"



Forse non è stato  chiaro ma la prima soluzione non prevede allocazione/deallocazione nella stessa funzione. Se la funzione deve restituire un buffer non avrebbe senso liberarlo nella stessa funzione! E' il chiamante che la dealloca.

Per le API, ti consiglio di consultare sempre e solo MSDN.

Le funzioni standard e le API sono cose diverse. Una non esclude l'altra.

La system implica l'esecuzione del command processor del sistema operativo e non lo ritengo né utile né necessario.
Evitala e fai quello che ti serve con le funzioni e codice C puro.


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
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:17
Venerdì, 22/01/2016
Postato originariamente da nessuno:

1) allocare il buffer prima di chiamare la funzione e liberarla dopo la sua chiamata quando non se ne ha più bisogno (la responsabilità di allocare/liberare la memoria è del "chiamante")



La si alloca nel main() e la si libera a fine main(), ed il main() è anch'essa una funzione, o sbaglio?



Per le API, ti consiglio di consultare sempre e solo MSDN.

Le funzioni standard e le API sono cose diverse. Una non esclude l'altra.

La system implica l'esecuzione del command processor del sistema operativo e non lo ritengo né utile né necessario.
Evitala e fai quello che ti serve con le funzioni e codice C puro.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:19
Venerdì, 22/01/2016
Testo quotato

Postato originariamente da Mikelius:
La si alloca nel main() e la si libera a fine main(), ed il main() è anch'essa una funzione, o sbaglio?



Non è affatto detto. La puoi allocare in una funzione chiamata e liberare in una funzione chiamante, qualsiasi siano le funzioni.



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
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:34
Venerdì, 22/01/2016
Non ci stiamo capendo, tu hai scritto

Testo quotato

Postato originariamente da Mikelius:

Postato originariamente da nessuno:

1) allocare il buffer prima di chiamare la funzione e liberarla dopo la sua chiamata quando non se ne ha più bisogno (la responsabilità di allocare/liberare la memoria è del "chiamante")




io voglio dire che mi sembra più ordinato allocare/deallocare nello stesso posto, nel mio caso il main(), e non allocarla nella funzione chiamata e deallocarla nella funzione chiamante. Ho capito che , correggimi se sbaglio, posso nel main() creare una funzione che alloca memoria, ritornala al main(), creare un'altra funzione che usi la memoria allocata, ritornare al main(), chiamare unha terza funzione che deallochi lo spazio in precedenza allocato e ritornare al main... voglio dire che questo mi sembra più disordinato per quello che vorrei fare io, forse per progetti più complessi avrà senso

Prima volevo scrivere,  ma mi è partito il post, per le MSDN ok, però a volte sono spiegate in modo rigido e non sempre con esempi esplicativi. Se c'era gualche guida che le spiegasse o almeno qualche buon esempio da affiancarglil non guasterebbe


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