PDA

View Full Version : [C]utilizzo realloc


mame83
03-06-2011, 18:16
ciao a tutti ho un po di difficolta con la funzione realloc e vorrei iniziare da un caso base.
Dato un vettore creato in maniera dinamica in una funzione voglio reallocarlo da n*n elementi a
n+1*n+1 elementi e azzerarlo tutto.

void RIEMPI(int n,int **vt)
{
int i;
*vt=(int*)malloc(sizeof(int)*n*n);
for (i=0; i<n*n; i++)
{
printf("dammi l elemento %d : ",i);
scanf("%d",&((*vt)[i]));
}
}
void INSERISCI_NODO(int n, int **vt)/*inseriamo un nodo isolato al grafo*/
{
int i;

*vt=(int*)realloc(*vt,(n+1*n+1));

for (i=0; i<((n+1)*(n+1)); i++)
(*vt)[i]=0;

}
int main()
{
int nodi,i;
int *vet=NULL;
printf("dammi il numero di nodi : \n");
scanf("%d",&nodi);
RIEMPI(nodi,&vet);
INSERISCI_NODO(nodi,&vet);
printf("valore del vettore e' : \n");
for (i=0; i<(nodi+1)*(nodi+1); i++)
printf("%d valore %d \n",i,vet[i]);
printf("\n");
system("PAUSE");
}

se ad esempio n =2 in output mi azzera fino al elemento 8 ((n+1)*(n+1)-1)dopo va in loop. spero mi aiutate grazie in anticipo .

wingman87
03-06-2011, 19:05
*vt=(int*)realloc(*vt,(n+1*n+1));
n+1*n+1 č uguale a n+n+1, devi mettere delle parentesi. Inoltre devi anche moltiplicare per sizeof(int), come hai fatto per la malloc.
E per azzerare pių efficientemente la memoria puoi usare memset: LINK (http://www.cplusplus.com/reference/clibrary/cstring/memset/)

mame83
04-06-2011, 10:27
*vt=(int*)realloc(*vt,(n+1*n+1));
n+1*n+1 č uguale a n+n+1, devi mettere delle parentesi. Inoltre devi anche moltiplicare per sizeof(int), come hai fatto per la malloc.
E per azzerare pių efficientemente la memoria puoi usare memset: LINK (http://www.cplusplus.com/reference/clibrary/cstring/memset/)

allora ho provato a mettere una variabile NUOVO=n+1*n+1 che mi restituisce 9 risultato esatto. funziona solo che non capisco perche bisogna moltiplicarlo per sizeof int

void INSERISCI_NODO(int n, int **vt)/*inseriamo un nodo isolato al grafo*/
{
int i;
int nuovi=(n+1)*(n+1);
printf("valore nuovi %d \n",nuovi);
*vt=(int*)realloc(*vt,nuovi*sizeof(int));

for (i=0; i<((n+1)*(n+1)); i++)
(*vt)[i]=0;

}

Kenger
04-06-2011, 11:21
Perchč a te serve un'area di memoria in grado di contenere 9 elementi di tipo int, quindi 9 moltiplicato per la grandezza di un intero. :)

mame83
04-06-2011, 11:40
ok grazie ancora per la soluzione