Nullptr

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

32 Risposte

  • Che vuoi dire?

    E' zero ... quanto vuoi che valga?
  • 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?
  • Se ben ricordo anche FFFFFFFFF alias -1 nei casi di puntatore aveva un significato ben specifico.
    anche se ora non ricordo quale fosse!
  • 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.
  • 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.
  • Nessun problema ma perché non usi la costante nullptr al posto di 0 ? Non esiste nel tuo ambiente assembly? Non esiste neanche il NULL ?
  • 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
  • E hai usato NULL ?
  • Non ho provato quando torno a casa provo.
  • 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
  • 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).
  • IsBadReadPtr non è affidabile. Anche su consiglio ms non deve essere usata.

    In realtà non esiste alcun metodo affidabile.
  • 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...?
  • 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