PDA

Visualizza la versione completa : [c] problema gestione buffer


PeppePes88
17-11-2009, 17:33
Ciao a tutti, devo ingrandire la grandezza di un buffer, perchè la grandezza finale mi è impossibile a sapere in fase di compilazione, io ho risolto cosi :


#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define BLOCK 64

int allunga ( char ** buffer, int size, int new_size) {

char *buffer_tmp = (char *)malloc(size);
//controlli
strncpy(buffer_tmp, *buffer, size); // salvo il vecchio buffer
free(*buffer);
*buffer = (char *)malloc( new_size);
strncpy(*buffer, buffer_tmp, size);
free(buffer_tmp);
}


int main() {

char * prova = (char *) malloc(BLOCK);
int i = 0;

for (i = 0; i < BLOCK; i++)
*(prova+i) = 'a';
printf("SIZEOF : %d, STRLEN %d\n", sizeof(prova), strlen(prova));
puts(prova);
allunga(&prova, BLOCK, 2*BLOCK);
printf("SIZEOF : %d, STRLEN %d\n", sizeof(prova), strlen(prova));
puts(prova);
strcat(prova,"PPPPPPPPPPPPPPP");
printf("SIZEOF : %d, STRLEN %d\n", sizeof(prova), strlen(prova));
puts(prova);

return 0;
}

Potrebbe essere una soluzione valida??
E poi esiste un modo per vedere quanta memoria è occupata da vettore allocato con mallloc? O provato ad usare anche calloc ma non cambia nulla...

shodan
17-11-2009, 18:33
Originariamente inviato da PeppePes88
Ciao a tutti, devo ingrandire la grandezza di un buffer, perchè la grandezza finale mi è impossibile a sapere in fase di compilazione, io ho risolto cosi :

Da un'occhiata a realloc.
http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/
L'esempio è simile a quello che ti serve.



E poi esiste un modo per vedere quanta memoria è occupata da vettore allocato con mallloc? O provato ad usare anche calloc ma non cambia nulla...


Che io sappia, no. L'unico è tenerne traccia da parte del programmatore.

oregon
17-11-2009, 21:20
Originariamente inviato da shodan
Che io sappia, no. L'unico è tenerne traccia da parte del programmatore.

Confermo ...

Loading