1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
double *tab;
char **name;
int N=10;
int j=0,ii=0,i=0,k=1;
tab = (double*)malloc((N*k) * sizeof (double));
name = (char**)malloc((N*k) * sizeof (*name));
for(i=0;i<(N*k);i++){name[i] = (char*)malloc(10 * sizeof (**name));}
for(i=0;i<45;i++){ /*loop starts*/
tab[i] = 1.5*i;
name[i] = "blabla";
if((i+1)%(N)==0){ /*if initial allocation filled up*/
/*realloc some more memory */
k++;
printf("realloc at %d \n",N*k);
tab = (double*)realloc(tab,(N*k) * sizeof (double));
name = (char**)realloc(name,(N*k) * sizeof (*name));
for(ii=0;ii<(N*k);ii++){name[ii] = (char*)realloc(name[ii],10 * sizeof (**name));}
}
j++;
} /*loop ends*/
if(N*k>j){ /*if realloced too much memory*/
/*realloc down to the right value*/
printf("final realloc at %d",j);
tab = (double*)realloc(tab,j * sizeof (double));
name = (char**)realloc(name,(j+1) * sizeof (*name));
for(ii=0;ii<(j+1);ii++){name[ii] = (char*)realloc(name[ii],10 * sizeof (**name));}
}
/*
printf("\n\n");
for(i=0;i<j;i++){
printf("tab[%d]=%f\n",i,tab[i]);
//printf("name[%d]=%s\n",i,name[i]);
}
*/
return 0;
} |
Partager