Newsgroup: it.comp.lang.c
Titolo: Aiutino facile!

Chiedo scusa ho un problema :
Mi trovo in una sottofunzione in C da questa chiamo un'altra sottofunzione
che mi ritorna un valore int. Fin qui tutto ok. Il valore lo ritorna
correttamente
e lo assegna ad una variabile, ma le altre variabili locali(della funzione
chiamante) al ritorno "non ci sono + " nel senso che non conservano il
valore precedente, sono indefinite.Come mai? Non credo di aver fatto errori,
da cosa puo' dipendere? Sto impazzendo!
Grazie a chi mi puo' aiutare.
Acrosstheuniverse.

da cosa puo' dipendere? Sto impazzendo!
Allora, quando tu chiami una funzione sullo stack viene riservato lo
spazio per il cosiddetto record di attivazione della funzione, che
comprende varie informazioni tra cui indirizzo di ritorno all'interno
del chiamante, spazio per variabili locali, parametri del chiamato.
Il valore di ritorno di una funzione viene, in un modo che a te non
interessa, restituito alla funzione chiamante. Tutto il resto quando
la funzione termina viene distrutto.
Questo e' a grandi linee cosa accade quando chiami una funzione.
Ora ti chiedo io, a che punto e' il tuo problema?
Se vuoi leggere variabili locali della chiamata non puoi piu', o
meglio puoi ma il risultato e' undefined.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 ha scritto nel messaggio
news:n_fy8.15567$W9.3...@twister2.libero.it...

Sembra strana la cosa ... finche non esci dalla chiamante le variabili
locali dovrebbero essere in vita e conservare il loro valore ... , prova a
definirle static se conservano il loro valore ; evidentemente esci dalla
funzione chiamante.
 --
Iscriviti al gruppo yahoo Linguaggio_C  con chat vocale per i soli iscritti
http://it.groups.yahoo.com/group/Linguaggio_C

Questa č la mia funzione chiamante, dove i č una variabile globale:
int searchposition(int *buffer,struct istruzione *octable)
{int sx=0, dx=400,m;
 int fine=0;
 do
   {m=fabs ((sx+dx)/2);
    /* alla posizione m ho il byte da confrontare con buffer */
   i=confronto(buffer,(octable+m)->byte1);
<------------------- CHIAMATA ALLA FUNZIONE
                             // A questo punto la "i" assume il valore che
cercavo,ma "sx" "dx" e "m" sono "non valutabili"
   if (i==0)
       fine=1;
   if (i>0)
      dx=m-1;
   if (i<0)
     sx=m+1;
    }while(!fine);
return (m);
}
La procedura chiamata č :
int confronto(int *buffer, char *chiave) /* Controlla se sono uguali due
vettori di interi da 8 bit */
{int chiave2[8];
 int fine=0;
 int flag[2]={0,0};
 for (i=0 ;i<=8;i++)
  chiave2[i]=chiave[i]-48;
 i=0;
 do
{if ((buffer[i])==(chiave2[i])) /* Se sono uguali */
    flag[0]=1,flag[1]=1;
 if ((buffer[i])<(chiave2[i])) /* Se buffer minore di chiave */
    flag[0]=0,flag[1]=1;
 if ((buffer[i])>(chiave2[i])) /* Se buffer maggiore di chiave */
    flag[0]=1,flag[1]=0;
fine=flag[0]*flag[1];
i++;
}while(fine==1 && i<8);
if (flag[0]==0 && flag[1]==1)
    return (1);
else if (flag[0]==1 && flag[1]==0)
    return (-1);
else if (flag[0]==1 && flag[1]==1)
    return (0);
}
Ho controllato facendo il debugging + volte e le funzioni vanno bene, tranne
che non mi conserva il valore delle mie variabili... :-((
Perchč ? Secondo voi?
Grazie x il tempo perso !!!
CIAO
Acrosstheuniverse.