PDA

View Full Version : [C++] Cancellare INTERO array...


pixie
08-03-2010, 15:33
Salve a tutti prima di esporvi il mio problema vi mostro il codice.

do{
buffer_temp [j] = buffer[k];
cout <<buffer_temp[j];
j++;k++;
if (buffer[k] == '\n') j=0;
else if (buffer[k] == ';' || buffer[k] == '\n')
{
buffer_temp[j]= NULL;
if (strcmp (ricerca, buffer_temp) == 0)
{ cout <<" Ci sono " <<++cont <<" parole uguali." <<'\n';
control = true;}
delete(buffer_temp);
j=0;
}
} while (k < x || control != true);

Scopo del codice: ho un elenco di dati preso da un file.txt e trova il numero di parole uguali.
Problema: mi incrementa il contatore solo se inserisco nella ricerca la prima parola dell'elenco.

Premetto: la delete () ho letto che serve per liberare la memoria dell'array cioè crearlo vuoto come lo si trova al primo avvio del programma ed è proprio quello mi serve ma sembra non faccia quello che deve fare.

Grazie dell'aiuto spero di essere stato esauriente.

cionci
08-03-2010, 17:14
La delete server par deallocare memoria dinamica. La delete va chiamata solo dopo che c'è stata una chiamata alla new.
L'uso di delete è errato. Si utilizza così:

delete[] puntatore;

o

delete puntatore;

Nel primo caso dealloca un array, nel secondo caso il solo elemento puntato.

Per spiegare l'utilizzo di new e delete ci vorrebbe una libro...non posso certo spiegartelo su un post di un forum.

pixie
08-03-2010, 20:06
ah è vero...nn avevo pensato all'allocazione dinamica di variabili quindi all'utilizzo di puntatori...si giusto la delete serve a quello...
Comunque sia non avete risolto il mio problema....:help: :help: :help:

cionci
08-03-2010, 20:10
Fosse stato un contenitore template ti avrei consigliato il for_ech.
Non lo è, quindi ti consiglio: http://www.cplusplus.com/reference/clibrary/cstring/memset/

pixie
08-03-2010, 20:35
ma alla fine fa una cosa d questo tipo memset
for (x=0; x<y;x++)
array[x] = cout.put('-');

cionci
08-03-2010, 20:51
array[x] = cout.put('-');

Questa istruzione non ha senso.

memset fa questo:
byte * bptr = (byte *)ptr;
for(int i = 0; i < num; i++)
bptr[i] = value;

pixie
09-03-2010, 19:58
bptr[i] = value;

Ok. Se voglio l'array vuoto come appena generato che cosa viene assegnato a "value"?

marco.r
09-03-2010, 22:29
Fosse stato un contenitore template ti avrei consigliato il for_ech.
Non lo è, quindi ti consiglio: http://www.cplusplus.com/reference/clibrary/cstring/memset/

uhm, for_each si puo' usare anche con gli array primitivi (e' uno dei motivi della sua interfaccia orrenda).

cionci
10-03-2010, 06:43
uhm, for_each si puo' usare anche con gli array primitivi (e' uno dei motivi della sua interfaccia orrenda).
Ops, in effetti me la ricordavo diversa. E' un po' che non la uso.

cionci
10-03-2010, 07:10
Ok. Se voglio l'array vuoto come appena generato che cosa viene assegnato a "value"?
Nessun valore, se allocato con new. Negli altri casi dipende un po'.