Home
Accesso / Registrazione
 di 

Qualcuno mi potrebbe aiutare?

4 risposte [Ultimo post]
ritratto di Eros.Giorgi
Offline
Titolo: User
Utente
Ultima visita:
36 settimane 1 giorno fa
Utente dal: 08/11/2013
Messaggi: 2

int ric_bin(int a)
{
int r;
if(a<0)
return r;
else
r=a%2;
return ric_bin(a/2);
}
Come mai quando provo a debaggare questa funzione ricorsiva mi spunta "Cannot access memory at address 0x7fff."?
Grazie.

ritratto di adrirobot
Offline
Titolo: PowerUser
Utente Power
Ultima visita:
1 ora 1 min fa
Utente dal: 04/06/2013
Messaggi: 107
Utente PREMIUM
Problemi di accesso

Ciao Eros
Poiché è il tuo primo messaggio di do il benvenuto nella comunità.
Non so molto di programmazione ma credo che tu hai inserito solo uno stralcio del programma, sei sicuro che il problema sia solo in questa frazione del codice?
Non potrebbe essere che la definizione di qualche variabile nel resto del programma crei il messaggio di errore.
A volte i messaggi sono generici e la soluzione va ricercata altrove. Potrebbe dipendere anche dall’ambiente di lavoro, poiché il problema si riferisce ad accesso di parti di memoria.
Comunque nella comunità ci sono sicuramente menti che sapranno trovare l’errore o ti daranno le dritte giuste per risolvere.
Un saluto
Adriano

ritratto di Eros.Giorgi
Offline
Titolo: User
Utente
Ultima visita:
36 settimane 1 giorno fa
Utente dal: 08/11/2013
Messaggi: 2
Grazie per il

Grazie per il benvenuto.
Comunque questo è il resto del codice:
int ric_bin(int);
int main()
{
int i, j, N, **vett, a=1;
printf("Inserire un numero strettamente positivo: ");
scanf("%d", &N);
for (i=0; i a*=2;
vett=malloc(a*sizeof(int*));
for(i=0; i vett[i]=malloc(N*sizeof(int));
a-=1;
for(i=0; i {
for(j=0; j vett[i][j]=ric_bin(a);

}

return 0;
}
Probabilmente si farà confusione con la matrice che ho dichiarato.

ritratto di Giorgio B.
Offline
Titolo: User++
Utente++
Ultima visita:
23 ore 2 min fa
Utente dal: 06/02/2013
Messaggi: 73
Utente PREMIUM
Ma qui for (i=0; i a*=2; non

Ma qui

for (i=0; i a*=2;

non manca una parentesi?!

Come anche qui
for(i=0; i
e qui
for(j=0; j vett[i][j]=ric_bin(a)
?

ritratto di Raffaele65
Offline
Titolo: User+
Utente+
Ultima visita:
15 settimane 1 giorno fa
Utente dal: 12/06/2011
Messaggi: 37
Utente PREMIUM
Prova con riserva

Non ho tantissima esperienza nel settore della programmazione.
Ho imparato che spesso è la distrazione a creare problemi.
Questa espressione è dubbia.

for (i=0; i a*=2; vett=malloc(a*sizeof(int*));

Mi spiego. La parte dichiarata come "i a*=2", dovrebbe essere un test. In realtà "i" non indica una espressione matematica nei confronti di "a*". di seguito "a*" non mi sembra corretto neanche per un eventuale quadrato. Di conseguenza l'allocazione di memoria che viene richiesta è un numeri intero non definito. Si corre il rischio di allocare una quantità indefinita di memoria. La funzione di allocazione di memoria non ho modo di valutarla correttamente.

Il valore che chiedi in ingresso, mi pare di capire che sia un numero positivo. Ma il test che fai nella funzione è per un numero minore di zero. Di conseguenza è sempre falsa e il valore che torna mi pare un assurdo. L'espressione "a%2" vuol dire il modulo 2 di "a". Ma in uscita si crea una ricorsività alla funzione stessa, dividendo per due il valore inserito in ingresso "a" che a mio avviso genera un loop infinito.

Quando esegui questo ciclo condizionato, hai fatto diventare una variabile associata ad un puntatore un array bidimensionale. Credo che il compilatore ti restituisca degli errori di formalismo.

for(j=0; j vett[i][j]=ric_bin(a);

Spero di non aver mal interpretato il listato.

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 6 utenti e 46 visitatori collegati.

Ultimi Commenti