Courir à travers une structure et d'imprimer toutes les valeurs?

J'ai un pointeur vers une structure et je voudrais récupérer l'ensemble de ses membres par essai et erreur. Je suis en train de courir à travers la structure par incrémentation du pointeur par un et derefencing il. Elle doit retourner une valeur correcte de la structure (tous les i*sizeof(int) moment), mais il ne le fait pas.

Ce que je fais mal?

fn (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
{

    /*
     assume that all struct members are int types

     typedef    struct 
     {
     mach_msg_bits_t    msgh_bits;
     mach_msg_size_t    msgh_size;
     mach_port_t        msgh_remote_port;
     mach_port_t        msgh_local_port;
     mach_msg_size_t    msgh_reserved;
     mach_msg_id_t      msgh_id;
     } mach_msg_header_t;

     size of the struct is 24.
     */

    printf("ID: %d \n",InHeadP->msgh_id); //prints 'ID: 1337'
    printf("Ptr: %p\n",InHeadP);

    for (int i = 0; i <= 24; i++)
    {
        int deref = *((int*)(InHeadP+i));
        printf("InHeadP[%d]=%d\n",i,deref);
            //no sign of 1337 anywhere

    }
}

P. S. je sais que je ne devrais pas faire ça, mais c'est uniquement pour des fins de test.

  • int *deref? N'avez-vous pas dire int deref?
  • Oui. int deref = *((int*)(InHeadP+i)). Changé.
  • "Il doit retourner une valeur correcte de la structure (chaque i*sizeof(int) temps) mais il ne fonctionne pas." -- Heu pourquoi devrait-il? ce n'est pas exactement la façon dont la mémoire est attribué.
  • Êtes-vous sûr que tous ces domaines sont en 32 bits? Si msgh_id est de 16 bits, vous ne verrez jamais un int c'est-à 1337. (Viens de voir votre assumer tous les types struct... commentaire. Encore, cela pourrait en fait être le cas?)
  • est-ce votre machine mot de 4 octets de long? en outre, ce qui ne sizeof (mach_msg_header_t) retour?
  • mach_msg_id_t est de int type. Pas sûr de la taille de celui-ci.
  • Taille de mach_msg_header_t est de 24.