Buongiorno a tutti.
Sto scrivendo un programma che generi Ntra traiettorie con moto random walking conteggiando il numero di volte che la particella soggetta al moto capiti in una certa posizione (array h). Tuttavia quando vado a stampare l'array risulta nullo (tranne per alcune posizioni in cui i numeri conteggiati sono a 8 o a 9 cifre).
Credo ci sia un errore nell'allocazione dell'array.
Riporto di seguito il codice.
Grazie in anticipo!!!
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int Tmax, Ntra;
int main(int argc, char*argv[]){
int b = 2;
int imax, measTime;
int **h;
int i, t, x;
long int seed;
if(argc != 3){
fprintf(stderr, "L'ordine deve essere %s Tmax, Ntra\n", argv[0]);
exit(EXIT_FAILURE);
}
Ntra = atoi(argv[2]);
Tmax = atoi(argv[1]);
srand(seed);
imax = (int)(log(Tmax)/log(b));
h=(int**)calloc(imax+1, sizeof(int*));
if(h == NULL){
printf("Locazione fallita\n");
}
t=1;
for(i=1; i<=imax; i++){
t*=b;
h=(int*)calloc(t+1, sizeof(int));
if(h == NULL){
printf("Locazione fallita\n");
}
}
for(int j=1; j<=Ntra; j++){
measTime=b;
i=0;
x=0;
for(t=1; t<=Tmax; t++){
x += -1+2*(int)(((double)rand()/RAND_MAX)*2);
if(t==measTime){
i++;
h[(int)((x+t)/2)]++;
measTime*=b;
}
}
}
for(i=1; i<=imax; i++){
Tmax*=b;
for(int y=1; y<=Tmax; y++){
printf("%d %d %d\n", i, 2*y-Tmax, h[y]);
}
}
for(i=1; i<=imax; i++){
free(h);
}
free(h);
}
P.S sto compilando con Tmax=10 e Ntra=15.