Array nello stack

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Array nello stack

    Autodidatta ha scritto:


    Sono stato impreciso nella terminologia ma solo per brevità
    Molto spesso, questo modo di fare in informatica non va bene. Devi essere molto preciso perché la terminologia è importantissima.
    Però la cosa che continuo a non capire è il meccanismo per cui, dovunque il compilatore metta la stringa, io ogni tanto me la trovi sovrascritta
    quando faccio una stringa come char*
    Hai scritto un po' di cose, a dir poco, inesatte o poco sensate ... il che dimostra che non hai acquisito il concetto di puntatore (fidati ...).

    Se trovi sovrascritta una stringa i casi sono solamente due:

    1) il tuo codice è sbagliato e scrive dove non dovrebbe (cosa fattibilissima in C)
    2) non hai mai allocato lo spazio per la stringa, quindi è il sistema che ci scrive (giustamente) dentro
    Questo fatto è successo pure ad altre persone, non sono il solo.
    A me mai, a meno che non incorro in quei due errori che ti ho segnalato ...
    Se non compio errori di programmazione nell'uso di qualche puntatore non dovrebbe succedere questo. Sbaglio?
    Non sbagli, di conseguenza commetti degli errori.
    com'è possibile che il compilatore metta una stringa nell'area codice? Perché dovrebbe farlo?
    Come ti è stato detto, anche se non in maniera precisa, perché quella stringa non varia mai (è costante). Ad esempio, se scrivi con una printf

    "Il risultato e'"

    questa stringa starà nell'area dati costanti (non nell'area del codice), comunque nel file .exe.

    @vbextreme
    Nei sistemi moderni si adottano tutti i meccanismi previsti (vedi Nx bit della CPU).
  • Re: Array nello stack

    @Oregon, forse ho sintetizzato troppo.
    Volevo far apprendere il concetto perché la realtà delle cose è assai ben più complessa.
    Anche l affermazione che le attuali CPU siano von Newman non è del tutto vera.

    Non sono un esperto di assembly ma se la memoria non mi inganna le costanti vanno a finire nel segmento .txt insieme al codice e non nel .data o .bss

    Riuscire a parlare di tutto ciò in un forum a volte diventa complesso.
  • Re: Array nello stack

    vbextreme ha scritto:


    sicuramente il codice che usi ha dei bug, bisognerebbe vederlo.

    I dati costanti e quindi non modificabili vengono messi nella area del codice perché è l'unica area della memoria teoricamente non modificabile.
    Teoricamente perché i consueti mainstream sono basati sulla classica architettura von Newman, avendo un unica area della memoria possono solo "emulare" la più robusta architettura Harvard con due distinte aree della memoria.
    Grazie. Quindi confermi che, se accade quello di cui parlavo, c'è un errore di programmazione da qualche parte.
  • Re: Array nello stack

    Certo ... come in quelle righe del crash ...
  • Re: Array nello stack

    oregon ha scritto:


    Autodidatta ha scritto:


    Sono stato impreciso nella terminologia ma solo per brevità
    Molto spesso, questo modo di fare in informatica non va bene. Devi essere molto preciso perché la terminologia è importantissima.
    Però la cosa che continuo a non capire è il meccanismo per cui, dovunque il compilatore metta la stringa, io ogni tanto me la trovi sovrascritta
    quando faccio una stringa come char*
    Hai scritto un po' di cose, a dir poco, inesatte o poco sensate ... il che dimostra che non hai acquisito il concetto di puntatore (fidati ...).

    Se trovi sovrascritta una stringa i casi sono solamente due:

    1) il tuo codice è sbagliato e scrive dove non dovrebbe (cosa fattibilissima in C)
    2) non hai mai allocato lo spazio per la stringa, quindi è il sistema che ci scrive (giustamente) dentro
    Questo fatto è successo pure ad altre persone, non sono il solo.
    A me mai, a meno che non incorro in quei due errori che ti ho segnalato ...
    Se non compio errori di programmazione nell'uso di qualche puntatore non dovrebbe succedere questo. Sbaglio?
    Non sbagli, di conseguenza commetti degli errori.
    com'è possibile che il compilatore metta una stringa nell'area codice? Perché dovrebbe farlo?
    Come ti è stato detto, anche se non in maniera precisa, perché quella stringa non varia mai (è costante). Ad esempio, se scrivi con una printf

    "Il risultato e'"

    questa stringa starà nell'area dati costanti (non nell'area del codice), comunque nel file .exe.

    @vbextreme
    Nei sistemi moderni si adottano tutti i meccanismi previsti (vedi Nx bit della CPU).
    Ti ringrazio della risposta, ma non capisco da cosa tu deduca che io non abbia capito il concetto di puntatore. L'affermazione "faccio una stringa con char*" era volutamente imprecisa (quindi sbagliata), ma solo per brevità, non è che pensavo che char* fosse una stringa. Se scrivo:
    char* s = "Ciao mondo";
    so benissimo che s è l'identificatore di un indirizzo il cui valore contenuto è un indirizzo, e precisamente il valore è l'indirizzo di memoria che contiene come valore il carattere 'C' (anzi, il codice ASCII del carattere 'C'), il primo carattere dell'array di caratteri {'C', 'i', 'a', 'o', ' ', 'm', 'o', 'n', 'd', 'o', '\0'}. Essendo un puntatore a carattere, ed essendo che un tipo è caratterizzato dall'insieme di valori e dall'insieme di operazioni su quei valori, il valore numerico (codice ASCII) del puntatore s dereferenziato verrà codificato e decodificato secondo una convenzione, e questa convenzione è la tabella ASCII. Mi sembra che più di così non si possa capire, però converrai che usare la terminologia precisa diventa un po' complicato, oneroso e anche fuorviante. D'altronde vedo che in questo forum non si usa proprio la terminologia corretta, giustamente aggiungerei, altrimenti ci si perde in giri di parole e si perde di vista il concetto.
  • Re: Array nello stack

    L'ho dedotto da come hai usato quel puntatore e con il relativo crash ... Sono errori tipici di chi non ha ancora chiarissimo (non che non l'ha capito...) il concetto di puntatore. Te lo dico per esperienza ma è solo un mio parere ...

    Per il resto non sono d'accordo... Piú si approssima la terminologia più ci sarà la possibilità, sul grande numero di studenti che gira nel forum, che molti acquisiscano concetti sbagliati.
Devi accedere o registrarti per scrivere nel forum
20 risposte