Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [c++]Visualizzazione di ciò che contiene una locazione di memoria

    codice:
    #include <iostream.h>
    
    int main()
    {
    	unsigned int *scope=(unsigned int *)0x0090DC36;
    	cout<<*scope;
    	return 0;
    }
    Non mi dà alcun errore nel debug, me lo dà in runtime ("expression cannot be evaluated" nella linea del cout).

    Il programma in poche parole deve VISUALIZZARE ciò che contiene l'indirizzo di memoria 0x0090DC36 in questo caso, o comunque un indirizzo di memoria qualsiasi. Dove potrebbe essere l'errore?
    ALLA GUERRA!!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [c++]Visualizzazione di ciò che contiene una locazione di memoria

    Originariamente inviato da Bellerofonte90
    codice:
    #include <iostream.h>
    
    int main()
    {
    	unsigned int *scope=(unsigned int *)0x0090DC36;
    	cout<<*scope;
    	return 0;
    }
    Non mi dà alcun errore nel debug, me lo dà in runtime ("expression cannot be evaluated" nella linea del cout).

    Il programma in poche parole deve VISUALIZZARE ciò che contiene l'indirizzo di memoria 0x0090DC36 in questo caso, o comunque un indirizzo di memoria qualsiasi. Dove potrebbe essere l'errore?
    Il sorgente di per sé è corretto. Sarebbe meglio usare <iostream> e fare using namespace std; invece di usare <iostream.h> ma il succo non cambierebbe.

    La questione è un'altra: ti è chiaro che non puoi andare a leggere/usare una qualunque locazione di memoria a caso e a tuo piacimento?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    è da poco che studio il c++, siccome ho saputo che anche se è un linguaggio ad alto livello comunque potevo in qualche modo manipolare gli indirizzi di memoria volevo vedere se riuscivo a visualizzare quello che conteneva un dato indirizzo di memoria.
    ALLA GUERRA!!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Bellerofonte90
    è da poco che studio il c++, siccome ho saputo che anche se è un linguaggio ad alto livello comunque potevo in qualche modo manipolare gli indirizzi di memoria volevo vedere se riuscivo a visualizzare quello che conteneva un dato indirizzo di memoria.
    Sì ma la questione è un'altra: ogni processo ha il suo spazio di indirizzamento e il "layout" della memoria dipende fortemente dal sistema operativo. Cioè è il SO che stabilisce dove mettere codice, dati, stack e quant'altro.
    A meno che tu abbia precise nozioni sulla architettura del sistema, è inutile andare a sparare locazioni di memoria a caso.

    Alloca della memoria con new o malloc() e usala come vuoi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utilizzo Windows Vista 6.0.6000

    non ho capito l'ultima tua riga

    "Alloca della memoria con new o malloc() e usala come vuoi."
    ALLA GUERRA!!!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Bellerofonte90
    non ho capito l'ultima tua riga

    "Alloca della memoria con new o malloc() e usala come vuoi."
    Generalmente non è il programmatore che stabilisce gli indirizzi di memoria a cui accedere!
    Salvo eccezioni, in cui la piattaforma hw/sw stabilisce che "esistono" delle locazioni o blocchi di memoria ben precisi e a determinati indirizzi.

    Ad esempio nel vecchio MS-DOS si sapeva che all'indirizzo B800:0000 c'era l'area di memoria relativa al buffer video in modalità testuale.
    Pertanto si poteva fare una cosa del tipo:

    char far *schermo = (char far *) 0xB8000000;

    e andarci a leggere/scrivere sopra.

    Nei moderni sistemi a 32 bit, Windows, Linux, ecc... c'è un maggior distacco dall'hardware e non ci sono almeno a livello utente indirizzi "precisi".

    Il programmatore C/C++ tipico si limita ad usare gli indirizzi forniti dagli operatori del linguaggio o forniti da una qualche funzione di libreria/del sistema operativo.

    Quindi si può fare:

    codice:
    int main (void)
    {
        int var;
        int *p = &var;    /* prendo l'indirizzo di var */
    
        .....
    }
    Spero che adesso sia un po' più chiaro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.