Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Samuel Krempp
le Tuesday 25 May 2004 14:43, écrivit :
Bonjour,
Dans un code que j'ai récupéré il y a une variable pointeur déclarée comme ceci : int *pt
à un moment dans le code il est fait
var=(int)pt
En faisant tourner au débugger je vois que var vaut 1024 mais pourquoi?
parceque c'est aussi bien que 42. ou 4242. ou 4242424..
plus sérieusement, tel quel ya pas grd chose à dire. Il me semble que la conversion est effectivement possible, et la seule utilité est de faire de l'arithmetique de pointeurs. (je pourrais tres bien me tromper, je fais jamais ce genre de conversion)
qu'est ce qui est fait de cette valeur entière ?
-- Sam
le Tuesday 25 May 2004 14:43, pascal.derex@libertysurf.fr écrivit :
Bonjour,
Dans un code que j'ai récupéré il y a une variable pointeur déclarée comme
ceci : int *pt
à un moment dans le code il est fait
var=(int)pt
En faisant tourner au débugger je vois que var vaut 1024 mais pourquoi?
parceque c'est aussi bien que 42. ou 4242. ou 4242424..
plus sérieusement, tel quel ya pas grd chose à dire. Il me semble que la
conversion est effectivement possible, et la seule utilité est de faire de
l'arithmetique de pointeurs. (je pourrais tres bien me tromper, je fais
jamais ce genre de conversion)
Dans un code que j'ai récupéré il y a une variable pointeur déclarée comme ceci : int *pt
à un moment dans le code il est fait
var=(int)pt
En faisant tourner au débugger je vois que var vaut 1024 mais pourquoi?
parceque c'est aussi bien que 42. ou 4242. ou 4242424..
plus sérieusement, tel quel ya pas grd chose à dire. Il me semble que la conversion est effectivement possible, et la seule utilité est de faire de l'arithmetique de pointeurs. (je pourrais tres bien me tromper, je fais jamais ce genre de conversion)
qu'est ce qui est fait de cette valeur entière ?
-- Sam
Pascal
En fait voici le code exacte.
/* Check for aligned word */ if(((int)ProgAdr & 0x0001) != 0) { return(FALSE); }
ProgAdr est un pointeur sur un int Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca lance la procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Merci
"Samuel Krempp" a écrit dans le message de news:40b3689c$0$6343$
le Tuesday 25 May 2004 14:43, écrivit :
Bonjour,
Dans un code que j'ai récupéré il y a une variable pointeur déclarée comme
ceci : int *pt
à un moment dans le code il est fait
var=(int)pt
En faisant tourner au débugger je vois que var vaut 1024 mais pourquoi?
parceque c'est aussi bien que 42. ou 4242. ou 4242424..
plus sérieusement, tel quel ya pas grd chose à dire. Il me semble que la conversion est effectivement possible, et la seule utilité est de faire de l'arithmetique de pointeurs. (je pourrais tres bien me tromper, je fais jamais ce genre de conversion)
qu'est ce qui est fait de cette valeur entière ?
-- Sam
En fait voici le code exacte.
/* Check for aligned word */
if(((int)ProgAdr & 0x0001) != 0)
{
return(FALSE);
}
ProgAdr est un pointeur sur un int
Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca lance la
procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Merci
"Samuel Krempp" <krempp@crans.truc.en.trop.ens-cachan.fr> a écrit dans le
message de news:40b3689c$0$6343$626a14ce@news.free.fr...
le Tuesday 25 May 2004 14:43, pascal.derex@libertysurf.fr écrivit :
Bonjour,
Dans un code que j'ai récupéré il y a une variable pointeur déclarée
comme
ceci : int *pt
à un moment dans le code il est fait
var=(int)pt
En faisant tourner au débugger je vois que var vaut 1024 mais pourquoi?
parceque c'est aussi bien que 42. ou 4242. ou 4242424..
plus sérieusement, tel quel ya pas grd chose à dire. Il me semble que la
conversion est effectivement possible, et la seule utilité est de faire de
l'arithmetique de pointeurs. (je pourrais tres bien me tromper, je fais
jamais ce genre de conversion)
/* Check for aligned word */ if(((int)ProgAdr & 0x0001) != 0) { return(FALSE); }
ProgAdr est un pointeur sur un int Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca lance la procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Merci
"Samuel Krempp" a écrit dans le message de news:40b3689c$0$6343$
le Tuesday 25 May 2004 14:43, écrivit :
Bonjour,
Dans un code que j'ai récupéré il y a une variable pointeur déclarée comme
ceci : int *pt
à un moment dans le code il est fait
var=(int)pt
En faisant tourner au débugger je vois que var vaut 1024 mais pourquoi?
parceque c'est aussi bien que 42. ou 4242. ou 4242424..
plus sérieusement, tel quel ya pas grd chose à dire. Il me semble que la conversion est effectivement possible, et la seule utilité est de faire de l'arithmetique de pointeurs. (je pourrais tres bien me tromper, je fais jamais ce genre de conversion)
qu'est ce qui est fait de cette valeur entière ?
-- Sam
Brieuc Jeunhomme
ProgAdr est un pointeur sur un int Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca lance la procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Je suppose que la procédure d'écriture doit faire des copies depuis la mémoire vive, avec des choses du genre:
while( ProgAdr < foo ) *bar++ = *ProgAdr++;
Bref, elle doit déréférencer progaddr, et, si progaddr ne pointe pas sur une adresse multiple de la taille d'un entier, ça passe sur un intel et peut-être quelques autres, mais sur la plupart des processeurs, ça crashe. L'effet du test ( ( (int)ProgAdr ) & 1 ) != 0 est de s'assurer que ProgAdr pointe bien sur un multiple de deux octets, et que donc, les accès réalisés par la procédure de copie seront bien alignés sur 16 bits.
-- BBP
ProgAdr est un pointeur sur un int
Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca lance la
procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Je suppose que la procédure d'écriture doit faire des copies depuis la
mémoire vive, avec des choses du genre:
while( ProgAdr < foo ) *bar++ = *ProgAdr++;
Bref, elle doit déréférencer progaddr, et, si progaddr ne pointe pas sur
une adresse multiple de la taille d'un entier, ça passe sur un intel et
peut-être quelques autres, mais sur la plupart des processeurs, ça
crashe. L'effet du test ( ( (int)ProgAdr ) & 1 ) != 0 est de s'assurer
que ProgAdr pointe bien sur un multiple de deux octets, et que donc, les
accès réalisés par la procédure de copie seront bien alignés sur 16
bits.
ProgAdr est un pointeur sur un int Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca lance la procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Je suppose que la procédure d'écriture doit faire des copies depuis la mémoire vive, avec des choses du genre:
while( ProgAdr < foo ) *bar++ = *ProgAdr++;
Bref, elle doit déréférencer progaddr, et, si progaddr ne pointe pas sur une adresse multiple de la taille d'un entier, ça passe sur un intel et peut-être quelques autres, mais sur la plupart des processeurs, ça crashe. L'effet du test ( ( (int)ProgAdr ) & 1 ) != 0 est de s'assurer que ProgAdr pointe bien sur un multiple de deux octets, et que donc, les accès réalisés par la procédure de copie seront bien alignés sur 16 bits.
-- BBP
Pascal
Ok merci j'ai compris
"Brieuc Jeunhomme" a écrit dans le message de news:
ProgAdr est un pointeur sur un int Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca lance la
procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Je suppose que la procédure d'écriture doit faire des copies depuis la mémoire vive, avec des choses du genre:
while( ProgAdr < foo ) *bar++ = *ProgAdr++;
Bref, elle doit déréférencer progaddr, et, si progaddr ne pointe pas sur une adresse multiple de la taille d'un entier, ça passe sur un intel et peut-être quelques autres, mais sur la plupart des processeurs, ça crashe. L'effet du test ( ( (int)ProgAdr ) & 1 ) != 0 est de s'assurer que ProgAdr pointe bien sur un multiple de deux octets, et que donc, les accès réalisés par la procédure de copie seront bien alignés sur 16 bits.
-- BBP
Ok merci j'ai compris
"Brieuc Jeunhomme" <bbp@via.ecp.fr> a écrit dans le message de
news:slrncb6sko.d1f.bbp@zen.via.ecp.fr...
ProgAdr est un pointeur sur un int
Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca
lance la
procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Je suppose que la procédure d'écriture doit faire des copies depuis la
mémoire vive, avec des choses du genre:
while( ProgAdr < foo ) *bar++ = *ProgAdr++;
Bref, elle doit déréférencer progaddr, et, si progaddr ne pointe pas sur
une adresse multiple de la taille d'un entier, ça passe sur un intel et
peut-être quelques autres, mais sur la plupart des processeurs, ça
crashe. L'effet du test ( ( (int)ProgAdr ) & 1 ) != 0 est de s'assurer
que ProgAdr pointe bien sur un multiple de deux octets, et que donc, les
accès réalisés par la procédure de copie seront bien alignés sur 16
bits.
"Brieuc Jeunhomme" a écrit dans le message de news:
ProgAdr est un pointeur sur un int Ca sert à tester si on peut écrire dans une EEPROM. Si ca passe ca lance la
procédure d'écriture.
Je ne comprends pas du tout l'interet du test
Je suppose que la procédure d'écriture doit faire des copies depuis la mémoire vive, avec des choses du genre:
while( ProgAdr < foo ) *bar++ = *ProgAdr++;
Bref, elle doit déréférencer progaddr, et, si progaddr ne pointe pas sur une adresse multiple de la taille d'un entier, ça passe sur un intel et peut-être quelques autres, mais sur la plupart des processeurs, ça crashe. L'effet du test ( ( (int)ProgAdr ) & 1 ) != 0 est de s'assurer que ProgAdr pointe bien sur un multiple de deux octets, et que donc, les accès réalisés par la procédure de copie seront bien alignés sur 16 bits.