Negative_creep
03-12-2010, 17:49
Ciao a tutti, volevo sapere se per allocare dinamicamente degli interi (senza usare una lista o altre strutture dati dinamiche) ma usando solamente due vettori istanziati con malloc bisogna per forza tenere il conto (tramite un contatore) della quantità che via via viene inserita oppure esiste un modo più "furbo".
Per esempio:
#include <stdio.h>
#include <stdlib.h>
int *vett;
int cont=-1;
int *num2;
void Alloca(int n,int* vett) {
int i;
cont++;
if(cont<2) {
vett[cont]=n;
}
if(cont==2) {
for(i=0;i<cont;i++)
num2[i]=vett[i];
num2[cont]= n;
}
else {
num2[cont]= n;
}
}
int main(void) {
int x,i;
int* tmp;
vett=malloc(2*sizeof(int));
num2=malloc(sizeof(int)*20);
while(1) {
printf("Inserisci un numero");
scanf("%d",&x);
if(x==0)
break;
Alloca(x,vett);
}
for(i=0;i<=cont;i++)
printf(" %d\n",num2[i]);
system("PAUSE");
}
In questo programma quando riempio vett grande 2 interi, uso num2 copiando il contenuto di vett nel nuovo array. Io però uso cont per tenere traccia di quanti interi ho inserito, siccome nei vettori allocati con malloc non riesco a sapere quanto è grande la memoria che io ho messo a disposizione (quindi la scrittura sizeof(num2)/sizeof(int) restituisce 1 e non 20 come verrebbe restituito da un array allocato statisticamente) esiste un modo senza usare cont per dire "Ok ora vett non può più ospitare numeri,uso num2".
Scusate se la cosa è banale, ma è un mio dubbio da niubbo! :boh:
Per esempio:
#include <stdio.h>
#include <stdlib.h>
int *vett;
int cont=-1;
int *num2;
void Alloca(int n,int* vett) {
int i;
cont++;
if(cont<2) {
vett[cont]=n;
}
if(cont==2) {
for(i=0;i<cont;i++)
num2[i]=vett[i];
num2[cont]= n;
}
else {
num2[cont]= n;
}
}
int main(void) {
int x,i;
int* tmp;
vett=malloc(2*sizeof(int));
num2=malloc(sizeof(int)*20);
while(1) {
printf("Inserisci un numero");
scanf("%d",&x);
if(x==0)
break;
Alloca(x,vett);
}
for(i=0;i<=cont;i++)
printf(" %d\n",num2[i]);
system("PAUSE");
}
In questo programma quando riempio vett grande 2 interi, uso num2 copiando il contenuto di vett nel nuovo array. Io però uso cont per tenere traccia di quanti interi ho inserito, siccome nei vettori allocati con malloc non riesco a sapere quanto è grande la memoria che io ho messo a disposizione (quindi la scrittura sizeof(num2)/sizeof(int) restituisce 1 e non 20 come verrebbe restituito da un array allocato statisticamente) esiste un modo senza usare cont per dire "Ok ora vett non può più ospitare numeri,uso num2".
Scusate se la cosa è banale, ma è un mio dubbio da niubbo! :boh: