Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#26 23 Jun 2004 01:51:40

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

remplace aussi

char* (*tab)=NULL;

par

char **tab=NULL;

ça sera plus lisible smile


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#27 23 Jun 2004 13:58:13

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

euh sizeof renvoie uniquement la taille en octet du type de la variable... il me semble!


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#28 23 Jun 2004 14:10:33

nykosledieu
Team G100
Lieu: Strasbourg
Date d'inscription: 29 Jan 2002
Messages: 3028
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

oui c'est ca je crois
en tout cas c kom ca ke moi je m'en sert


Nykosledieu
nykosJEMMERDELESPAM@graph100.com - http://team.graph100.com
Venez sur le chat !!

Hors ligne

 

#29 23 Jun 2004 14:48:17

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

euh sizeof renvoie uniquement la taille en octet du type de la variable... il me semble!

pour un (vrai) tableau, ca renvoie la taille du tableau


Pensez à surveiller mes releases wink

Hors ligne

 

#30 23 Jun 2004 16:40:18

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: Comment allouer dynamiquement un tablo de pointeur ?

char * truc = "hello"; // sizeof(truc) renvoie 2 ( = taille d'un pointeur)
char truc [] = "hello"; // sizeof(truc renvoie 6 ( = 5 caracteres + 1 caractere de fin de chaine)

Hors ligne

 

#31 24 Jun 2004 05:00:38

nykosledieu
Team G100
Lieu: Strasbourg
Date d'inscription: 29 Jan 2002
Messages: 3028
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

ben c normal vu qure dans les 2 cas t'as juste un pointeur....


Nykosledieu
nykosJEMMERDELESPAM@graph100.com - http://team.graph100.com
Venez sur le chat !!

Hors ligne

 

#32 24 Jun 2004 05:19:31

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

http://orwell01.free.fr/test.PNG
non nykos, le premier est un vrai tableau, le second est un faux, c'est normal que ca donne 6 (la taille du tab) pour le vrai, et 2 (la taille du pointeur) pour le faux yikes
mastermage, t'as du oublier de changer la valeur en copiant-collant wink


Pensez à surveiller mes releases wink

Hors ligne

 

#33 24 Jun 2004 05:29:48

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

Juste un autre ptit test...  lol

http://orwell01.free.fr/test2.PNG


Pensez à surveiller mes releases wink

Hors ligne

 

#34 24 Jun 2004 06:01:35

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: Comment allouer dynamiquement un tablo de pointeur ?

oui effectivement g fait copier coller, mais de toute facon ca m'aurait etonné que 2 = 5+1  lol

Hors ligne

 

#35 24 Jun 2004 14:39:19

nykosledieu
Team G100
Lieu: Strasbourg
Date d'inscription: 29 Jan 2002
Messages: 3028
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

oui bon moi j'utilise sizeof que sur les types primaires donc ca me retourne la taille du type pas la taille d'un tableau


Nykosledieu
nykosJEMMERDELESPAM@graph100.com - http://team.graph100.com
Venez sur le chat !!

Hors ligne

 

#36 24 Jun 2004 23:22:05

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

pour le compilateur uniquement c'est différent, dans le code assembleur ils doivent être identiques, c'est à dire un unsigned int qui représente une adresse par rapport à DS qui pointe sur le premier caractère de la chaîne "hello".


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#37 25 Jun 2004 06:31:35

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

logique, d'ailleurs sizeof est presque une "macro" (avec des gros guillemets) dans le sens où ce n'est pas une instruction traduite en asm, elle est directement remplacée par un entier... la distinction entre les 2 types est nécessaire pour les premieres passes du compilo, mais apres elle disparait wink


Pensez à surveiller mes releases wink

Hors ligne

 

#38 25 Jun 2004 09:38:51

dada66
Membre Communauté Graph100
Lieu: Perpignan
Date d'inscription: 09 Oct 2002
Messages: 1033

Re: Comment allouer dynamiquement un tablo de pointeur ?

en tout cas c clairement différent de faire :
char* buf = "toto";
char buf2[] = "toto";

meme en asm il y aura une différence. Sauf le cas ou buf est déclarée en variable globale.
buf est pointeur dans la valeur contenu représente une adresse, ou pour buf2 la valeur c le premier élément du tableau, c un pointeur constant.
Donc dans l'asm inline du C, pour avoir l'offset fo écrire "__asm mov si, OFFSET buf2" contrairement à buf où un simple "__asm mov si, buf" suffit


Flash100, F100Console, GComm, ... : http://flash100.free.fr/xoops

Hors ligne

 

#39 25 Jun 2004 18:14:31

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

oui d'ailleur les pointeurs constants on ne peut pas les modifier (logique) et on ne peut d'ailleurs pas faire dans ce cas &buf2, le compilateur l'accepte quand même et &buf2==buf2.

Je me souviens m'être heurté à ce problème hmm

Mais y'a t-il une différence dans le code machine générée? , buf2 est toujours une adresse pointant sur le premier caractère de "toto", non ?

J'ai fait un petit programme test:

Code:

#include <stdio.h> 

int main()
{
     char  test [] ="truc_1";
     char *test2   ="truc_2";

     printf("test="%s" test2="%s"nn", test, test2);
     
     printf("      test value: 0x%X,      test2 value:   0x%Xnn", (unsigned int)test,     (unsigned int)test2    );
     
     printf("    test address: 0x%X,      test2 address: 0x%Xnn", (unsigned int)&test,    (unsigned int)&test2   );
     
     printf(" test[1] address: 0x%X,   test2[1] address: 0x%Xnn", (unsigned int)&test[1], (unsigned int)&test2[1]);
     
     printf("&test="%s" &test2="%s"nn", (char *)(&test), (char *)(&test2));

     printf("DS=0x%0X", (unsigned int)_DS);
     

   return 0;
}

voici ce qu'il retourne:

Code:

E:TCProgsavirer>test
test="truc_1" test2="truc_2"

      test value: 0xFFEE,      test2 value:   0x15E9

    test address: 0xFFEE,      test2 address: 0xFFEC

 test[1] address: 0xFFEF,   test2[1] address: 0x15EA

&test="truc_1" &test2="Ú§truc_1"

DS=0x1550

Ce que je ne comprend pas c'est pourquoi la valeur de "test2" est si différente de la valeur de "test", alors que si on regarde avec un éditeur hexa, les 2 chaînes sont côte à côte dans l'exécutable.  roll


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#40 26 Jun 2004 10:23:29

nykosledieu
Team G100
Lieu: Strasbourg
Date d'inscription: 29 Jan 2002
Messages: 3028
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

c koi la différence entre %X  et   %p
moi j'avais appris avec %p


Nykosledieu
nykosJEMMERDELESPAM@graph100.com - http://team.graph100.com
Venez sur le chat !!

Hors ligne

 

#41 26 Jun 2004 16:01:25

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Comment allouer dynamiquement un tablo de pointeur ?

%p ça donne la adresse des pointeurs et %X la valeur hexa, non?


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#42 27 Jun 2004 04:23:51

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: Comment allouer dynamiquement un tablo de pointeur ?

Code:

char  test [] ="truc_1"; //test = adresse constante de le premiere lettre de "truc"
char *test2   ="truc_2"; //test2 = variable de 2 octets, contenant l'adresse de la premiere lettre de "truc 2"

la difference c'est que dans le code asm (ou binaire peu importe) généré, la valeur de test va etre utilisée directement, alors que test2 est 1 variable. en asm ca va etre dans le style:

Code:

; x = test[0]
mov al, [test]
mov [x], al

;x = test2[0]
mov bx, [test2]
mov al, [bx]
mov [x], al

Hors ligne

 

#43 27 Jun 2004 06:06:25

dada66
Membre Communauté Graph100
Lieu: Perpignan
Date d'inscription: 09 Oct 2002
Messages: 1033

Re: Comment allouer dynamiquement un tablo de pointeur ?

en écrivant char  test [] ="truc_1";

le compilo fait une COPIE de la chaine de caractère "truc_1" dans test qui sera ensuite empiler, d'où l'écart d'adresse. Test pointe dans la pile et buf pointe sur une variable globale présente dans l'exe.

Remplace la première ligne par "static char test [] ="truc_1";" pour éviter la copie.


Flash100, F100Console, GComm, ... : http://flash100.free.fr/xoops

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr