Assegnare un puntatore in overflow

di il
6 risposte

Assegnare un puntatore in overflow

Alla fine di un ciclo ho un puntatore che riceve come ultima assegnazione un'area di memoria fuori da un blocco allocato:

int *p = &pBlok[n];

dove pBlok è definito come:

int *pBlok = (int*)malloc(n * sizeof(int));

Ora, il codice funziona bene perché il puntatore p non viene valutato dopo la sua ultima assegnazione e subito dopo riceve il valore zero, ma mi chiedevo se potenzialmente possa dare altri problemi. Stavo pensando ad esempio nel remoto caso in cui il blocco di memoria si trovasse alla fine di un segmento di memoria, o qualcosa del genere. O la mia è una preoccupazione ingiustificata?

6 Risposte

  • Re: Assegnare un puntatore in overflow

    Finché non usi il puntatore non ci sono problemi, ma non capisco perché lo assegni se non ti serve. Non ha senso
  • Re: Assegnare un puntatore in overflow

    Credo possa succedere all'interno di un ciclo, che l'ultima passata porti il puntatore fuori dall'area allocata, es.:
    p = pBlok;
    for(i=0;i<n;i++)
    {
        // fai qualcosa con *p
        // ...
        
        p++;
    }
    // all'uscita, p punta fuori
    A meno che non ci siano ottimizzazioni da parte del compilatore, effettivamente il puntatore finisce per puntare fuori dall'area allocata ma, nella mia piccola esperienza, non ho mai avuto problemi con nessun compilatore.
  • Re: Assegnare un puntatore in overflow

    Il valore di un puntatore è un indirizzo di memoria, lo puoi assegnare esplicitamente, esempio

    int *x = (int *)0x12345678;

    senza problemi, finché non lo usi per accedere al dato.
  • Re: Assegnare un puntatore in overflow

    Chiaro!
    Quello che volevo esemplificare era il caso sottoposto dal nostro amico Unqualunque, che dice
    Alla fine di un ciclo ho un puntatore che riceve come ultima assegnazione un'area di memoria fuori da un blocco allocato
  • Re: Assegnare un puntatore in overflow

    Si, infatti, proprio come dice candaluar il puntatore finisce per puntare fuori dall'area allocata a causa dell'ultima passata del ciclo, ma proprio perché si tratta dell'ultima passata il puntatore non viene più adoperato per accedere ai dati.

    La mia preoccupazione era per potenziali effetti collaterali, però in effetti come dice oregon, anche se un puntatore riceve un indirizzo di memoria non valido, sia pur fuori segmento o fuori pagina, finché non tenta di accedere a tale indirizzo non può creare problemi.
  • Re: Assegnare un puntatore in overflow

    Ti ho descritto il caso più generale possibile proprio per farti notare che il tuo è un caso particolare che rientra in quanto ti ho detto.

    Se non ha importanza per nessun valore (anche esplicito) del puntatore, a maggior ragione per il caso da te descritto.
Devi accedere o registrarti per scrivere nel forum
6 risposte