Home Forum PROGRAMMAZIONE EMBEDDED Qualcuno mi potrebbe aiutare?

Questo argomento contiene 4 risposte, ha 4 partecipanti, ed è stato aggiornato da  Raffaele65 1 anno fa.

Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)
  • Autore
    Articoli
  • #60113

    Anonimo

    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.

    #74444
    adrirobot
    adrirobot
    Partecipante

    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

    #74445

    Anonimo

    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.

    #74473

    Giorgio B.
    Partecipante

    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)
    ?

    #74488

    Raffaele65
    Membro

    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.

Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.