Nullptr

di il
32 risposte

Nullptr

Salve a tutti
qualcuno mi potrebbe dire quale è il valore per verificare un nullptr?

32 Risposte

  • Re: Nullptr

    Che vuoi dire?

    E' zero ... quanto vuoi che valga?
  • Re: Nullptr

    Per esempio
     xyz proc Arg1:dword
     ;Arg1 è un puntatore
     ;adesso devo vedere se è un puntatore valido o meno?
     cmp Arg1,nullptr
     jne attiva_programma
     
    adesso non so' quale è il valore che devo mettere a nullptr.
    potrebbe essere sia 0 che FFFFFFFFF o c'è un valore specifico che io ignoro?
  • Re: Nullptr

    Se ben ricordo anche FFFFFFFFF alias -1 nei casi di puntatore aveva un significato ben specifico.
    anche se ora non ricordo quale fosse!
  • Re: Nullptr

    Ti ripeto ... nullptr vale zero. FFFFFFFF non c'entra nulla.

    Ma tu cosa intendi con "puntatore valido"? Puoi solo confrontare con 0 o diverso da 0 ma, nel secondo caso, non sai se il puntatore è valido.
  • Re: Nullptr

    Grazie
    siccome ho fatto una routine in c++ che alloca della memoria dinamica e passa un puntatore alla memoria allocata.
    allora mi serviva il valore di nullptr per sapere se era andato tutto bene o meno.
    il confronto reale è:
    
    xyz proc Arg1:dword
    mov esi,Arg1
    cmp dword ptr [esi],nullptr
    jne attiva_programma
    
    
    cmp Arg1,0
    conoscendo i tipi di dati che tratta la routine
    serve solo a capire, ma manco molto!, se Arg1 e una costante o è l'offset di qualche variabile.
    scusami di averti portato fuori strada.
  • Re: Nullptr

    Nessun problema ma perché non usi la costante nullptr al posto di 0 ? Non esiste nel tuo ambiente assembly? Non esiste neanche il NULL ?
  • Re: Nullptr

    Se ben ricordo no uso l'assemblatore integrato nel visual studio 2012
    so bene che non è il migliore ma per ragioni di sviluppo/compatibilità uso quello
  • Re: Nullptr

    E hai usato NULL ?
  • Re: Nullptr

    Non ho provato quando torno a casa provo.
  • Re: Nullptr

    Ho provato e non la riconosce come costante la dovrei definire.
    a questo punto tanto vale usare il valore con un bel commento.
    grazie comunque per l'aiuto
  • Re: Nullptr

    mov esi,Arg1
    .if esi
       .... ce l'hai un puntatore ....
    .endif
    Questo verifica se hai un nullptr. Se vuoi sapere se hai un puntatore valido, prova IsBadReadPtr, oppure installa SEH (ma è una pessima abitudine del mondo C/C++, non te lo consiglio).
  • Re: Nullptr

    IsBadReadPtr non è affidabile. Anche su consiglio ms non deve essere usata.

    In realtà non esiste alcun metodo affidabile.
  • Re: Nullptr

    oregon ha scritto:


    In realtà non esiste alcun metodo affidabile.
    Giusto. : Even when the function indicates that the process has read access to the specified memory, you should use structured exception handling when attempting to access the memory

    Ma cosa fa il handler se lo stack tocca il fondo...?
  • Re: Nullptr

    Dipende se ha spazio alloca altrimenti il sistema invia il codice di stack overflow e il programma termina.
    questa fase però non riguarda il post perchè se si verifica lo stack overflow la routine non parte proprio.
    la routine di gestione dello stack overflow viene fatta dal programma che poi lancerà questa routine.
    ma in questo caso si vuol semplicemente verificare se una variabile è stata allocata oppure no.
    facendo restituire il puntatore se la variabile è stata allocata allora [arg1] avrà un valore intero a 8,16,32,64 byte a seconda del sistema utilizzato.
    altrimenti [Arg1] avrà il codice di nullptr alias 0
    comunque se ti interessa l'argomento dai un occhiata a questo link che è molto interessante
Devi accedere o registrarti per scrivere nel forum
32 risposte