Newsgroup: it.comp.lang.c
Titolo: errore esecuzione inspiegabile

Salve,
ho il dev c++ e win98.
Ho scritto il programma che al suo interno presenta la sequenza di
istruzioni che seguano:
main()
....
inizializza_vettori(&r,
&v[0],&k[0],&m[0],&q[0],&mi[0],&qi[0],&a[0],&b[0],&c[0],&ai[0],&bi[0],&ci[0]
,N);
//printf("dopo inizializza_vettori v[0]=%f\n", v[0]); getchar();
//printf("dopo inizializza_vettori v[1]=%f\n", v[1]); getchar();
f_Ab_statica(&r, Ab_statica);
Ab_mobile_partenza(Ab_mobile, &r);
somma_matrici(Ab_statica,Ab_mobile,Ab);
//printf("dopo inizializza_vettori v[0]=%f\n", v[0]); getchar();
//printf("dopo inizializza_vettori v[1]=%f\n", v[1]); getchar();
...
La funzione "inizializza_vettori" inizializza i vettori passateli come
argomento, tutti di
lunghezza N=35.
Pertanto essa fissa anche il valore di v[0] e v[1], che voglio visualizzare.
Ora però c'è un fatto strano:
se io rimuova i simboli di commento solo davanti la prima coppia delle
printf,
allora in fase di esecuzione, il windows prima mi stampa i valori v[0] e
v[1] corretti, e poi
mi dà errore e chiude bruscamente il programma.
Se invece io rimuova i simboli di commento solo davanti la seconda coppia
delle printf, mentre la
 prima coppia rimanga commentata, allora  il windows prima mi stampa i
valori v[0] e v[1] corretti, e poi
non mi  dà errore e prosegue il programma.
Come si spiega?
Dove è l'errore?
Nelle due printf? Nella funzione inizializza_vettori? o nelle funzioni che
seguono la prima coppia delle printf?
Considerate che il blocco di funzioni
f_Ab_statica(&r, Ab_statica);
Ab_mobile_partenza(Ab_mobile, &r);
somma_matrici(Ab_statica,Ab_mobile,Ab);
nè legge e nè scrive i valori di v[0] e v[1].
grazie,
adriano


Non ci dici di che tipo e' v. Non ci dai il codice di
inizializza_vettori.
Riprova.

 wrote in message
85e18859-a424-47c2...@m73g2000hsh.googlegroups.com...


ecco la dichiarazione delle variabili nel main, fra cui v[]:
////////////////////////////////////////////////////////////////////////////
///////////////////
main()
{
int N, n, n_regime, T;
struct parametri_elettrici  r;
double Ab_mobile[4][5], Ab_statica[4][5], Ab[4][5], Gb[4][5];
double
v[N],k[N],m[N-1],q[N-1],mi[N-1],qi[N-1],a[N-1],ai[N-1],b[N-1],bi[N-1],c[N-1]
,ci[N-1],vcb1, veb1, Icb2, Ieb2;
////////////////////////////////////////////////////////////////////////////
///////////////////
Ora Invece riporto il codice della funzione inizializza_vettori :
//////////////////////////////////////////////////////////////////////////
void inizializza_vettori(struct parametri_elettrici *p,double *v, double *k,
double *m, double *q, double *mi, double *qi, double *a,double *b, double
*c, double *ai, double *bi,double *ci, int N)
{
/*
questa funzione calcola le corrispondenze esatte vi<->ki per i vari "vi" di
confine fra i vari tratti, p
*/
int i;
double base;
base=0.83333;
v[0]=-9;
v[1]=0;
printf("v[0]=%f\n", v[0]); getchar();
printf("v[1]=%f\n", v[1]); getchar();
k[0]=exp(v[0]/(p->vt))-1;
k[1]=exp(v[1]/(p->vt))-1;
printf("k[0]=%f\n", k[0]); getchar();
printf("k[1]=%f\n", k[1]); getchar();
for(i=2;i<N; i++)
{
v[i]=9*pow(base,(N-i));
k[i]=exp(v[i]/(p->vt))-1;
printf("v[%d]=%f\n", i, v[i]); getchar();
printf("k[%d]=%f\n", i, k[i]); getchar();
}
printf("v[1]=%f\n", v[1]); getchar();
printf("v[2]=%f\n", v[2]); getchar();
printf("v[3]=%f\n", v[3]); getchar();
printf("v[4]=%f\n", v[4]); getchar();
for(i=0;i<N;i++)
{
m[i]=exp(v[i]/(p->vt))/(p->vt);
q[i]=k[i]-m[i]*v[i];
mi[i]=-1/m[i];
qi[i]=v[i]-mi[i]*k[i];
/*
Ora vengono calcolati i coefficienti a,b,c
*/
a[i-1]=((v[i-1]-v[i])*
m[i-1]+k[i-1]-k[i])/(pow(v[i],2)-2*v[i-1]*v[i]+pow(v[i-1],2));
ai[i-1]=((k[i-1]-k[i])*
mi[i-1]+v[i-1]-v[i])/(pow(k[i],2)-2*k[i-1]*k[i]+pow(k[i-1],2));
b[i-1]=((pow(v[i],2)-pow(v[i-1],2))*m[i-1]+2*v[i-1]*(k[i-1]-k[i]))/(pow(v[i]
,2)-2*v[i-1]*v[i]+pow(v[i-1],2));
bi[i-1]=((pow(k[i],2)-pow(k[i-1],2))*mi[i-1]+2*k[i-1]*(v[i-1]-v[i]))/(pow(k[
i],2)-2*k[i-1]*k[i]+pow(k[i-1],2));
c[i-1]=((pow(v[i-1],2)*v[i]-v[i-1]*pow(v[i],2))*m[i-1]+pow(v[i-1],2)*k[i]+po
w(v[i],2)*k[i-1]-2*v[i-1]*v[i]*k[i-1])/(pow(v[i],2)-2*v[i-1]*v[i]+pow(v[i-1]
,2));
ci[i-1]=((pow(k[i-1],2)*k[i]-k[i-1]*pow(k[i],2))*m[i-1]+pow(k[i-1],2)*v[i]+p
ow(k[i],2)*v[i-1]-2*k[i-1]*k[i]*v[i-1])/(pow(k[i],2)-2*k[i-1]*k[i]+pow(k[i-1
],2));
}
/*
ora vengono riportati gli esiti della stampa a video dei vettori v[] e k[]:
v[0]=-9;
v[1]=0;
v[2]=0.037910;
v[3]=0.045492;
v[4]=0.054591;
v[5]=0.065509;
v[6]=0.078611;
v[7]=0.094334;
v[8]=0.113201;
v[9]=0.135842;
v[10]=0.163011;
v[11]=0.195614;
v[12]=0.234738;
v[13]=0.281686;
v[14]=0.338025;
v[15]=0.405632;
v[16]=0.486760;
v[17]=0.584114;
v[18]=0.700940;
v[19]=0.841131;
v[20]=1.009361;
v[21]=0;
v[22]=0;
v[23]=0;
v[24]=0;
v[25]=0;
v[26]=0;
v[27]=0;
v[28]=0;
v[29]=0;
v[30]=0;
v[31]=0;
v[32]=0;
v[33]=0;
v[34]=0;
v[35]=0;
v[36]=0;
v[37]=0;
v[38]=0;
v[39]=0;
k[0]=-1;
k[1]=0;
k[2]=3.555782;
k[3]=5.169909;
k[4]=7.878473;
k[5]=12.740752;
k[6]=22.206949;
k[7]=42.525945;
k[8]=91.577558;
k[9]=227.98989;
k[10]=677.87687;
k[11]=0;
k[12]=0;
k[13]=0;
k[14]=0;
k[15]=0;
k[16]=0;
k[17]=0;
k[18]=0;
k[19]=0;
k[20]=0;
k[21]=0;
k[22]=0;
k[23]=0;
k[24]=0;
k[25]=0;
k[26]=0;
k[27]=0;
k[28]=0;
k[29]=0;
k[30]=0;
k[31]=0;
k[32]=0;
k[33]=0;
k[34]=0;
k[35]=0;
k[36]=0;
k[37]=0;
k[38]=0;
k[39]=0;
*/
}
////////////////////////////////////////////////////////////////////////////
grazie,
adriano