Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » Adresse d'un pointeur (15 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Benjy Ecrit le: Jeudi 19 août 2004 à 14:26 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Voila je voudrai afficher l'adresse d'un pointeur alors je fait ca
void _main(void)
{
  clrscr();
  short *point=malloc(sizeof(short)),a=1;
  point=&a;
  printf("%d\n",*point);
  a++;
  printf("%d\n",*point);
  a++;
  printf("%d\n",*point);
  printf("%p\n",point);
  ngetchx();
  free(point);
}

mais printf("%p\n",point); ca ne marche pas pourquoi?
Le langage C y'a pas mieux!!!
    
./Post n°1   Marquer comme non lu.
LionelA Ecrit le: Jeudi 19 août 2004 à 15:02 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Ton malloc ne sert a rien puisque tu affecte ensuite l'adresse de a à point. En plus quand tu fait free(point) ca doit retourner une erreur car tu n'as pas le droit de liberer l'espace pris par une variable declarée comme a (il me semble).
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°2   Marquer comme non lu.
Benjy Ecrit le: Jeudi 19 août 2004 à 16:50 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Ok mais pour le free aucune erreur et si je le met pas il ya bien un espace memoire non libere donc je doit le mettre!! et pour l'affichage de l'adresse?
-Edité le Jeudi 19 août 2004 à 16:54 par benjy-
Le langage C y'a pas mieux!!!
    
./Post n°3   Marquer comme non lu.
geogeo Ecrit le: Jeudi 19 août 2004 à 17:34 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Aie aie aie.


void _main(void)
{
  clrscr ();
  unsigned short var;
  unsigned short *ptr = &var;

  printf ("%lu\n",(unsigned long)&ptr); 
  ngetchx ();
}
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°4   Marquer comme non lu.
geogeo Ecrit le: Jeudi 19 août 2004 à 17:37 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


De plus faire un malloc pour avoir un epsace mémoire de 2 octets c'est stupide. Et de plus en perdant le pointeur. Normalement ton programme plante et donne soit un 'Protect memory violation' soit un 'Address Error'...
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°5   Marquer comme non lu.
Benjy Ecrit le: Jeudi 19 août 2004 à 18:26 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Je comprend pas, alors dans quel cas on utilise le free ??
Le langage C y'a pas mieux!!!
    
./Post n°6   Marquer comme non lu.
LionelA Ecrit le: Jeudi 19 août 2004 à 18:39 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Il faut utiliser free sur un pointeur qui pointe vers une zone memoire que tu as allouée quand tu ne veux plus l'utiliser.

exemple

unsigned char * tab;
unsigned short taille;

.... du code qui calcule 'taille' en fonction de ce que tu veux

tab = (unsigned char *)malloc(sizeof(unsigned char) * taille); // allocation dynamique

.... du code qui utilise 'tab'

free (tab); // lorsque tu n'en a plus besoin


ce que tu faisait n'était pas correct car tu affecte l'adresse de 'a' à 'point' ce qui remplace l'endroit pointé par 'point' qui du coup ne pointe plus sur la zone "mallockée" mais plutot sur 'a'
tu as donc perdu l'adresse de ta zone allouée et tu ne peut plus la liberer ...
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°7   Marquer comme non lu.
geogeo Ecrit le: Jeudi 19 août 2004 à 18:41 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Euh lol

On utilise malloc généralement pour alloué plus de 2 octets quand même. Malloc renvoie un pointeur qui permet de manipuler cet espace mémoire.

Genre:

void main_ (void)
{
  void *screen_ptr = malloc (LCD_SIZE);
  memcpy (screen_ptr, LCD_MEM, LCD_SIZE);
  //Ton programme

  //Restaure écran
  memcpy (LCD_MEM, screen_ptr, LCD_SIZE);
  //Libère mémoire allouée
  free (screen_ptr);
}


Une chose importante, free doit toujours être utilisé avec un pointeur, sinon ça plante.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°8   Marquer comme non lu.
Thor Ecrit le: Dimanche 29 août 2004 à 13:36 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


D'ailleurs j'ai une question sur free() : comment fait elle pour connaitre la taille du bloc alloué que par l'adresse du premier bloc mémoire?
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°9   Marquer comme non lu.
geogeo Ecrit le: Dimanche 29 août 2004 à 13:46 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Grâce à la table de handles. :)
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°10   Marquer comme non lu.
Sasume Ecrit le: Dimanche 29 août 2004 à 14:07 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Il me semble qu'en fait, le n° du handle est stocké au début du bloc mémoire alloué.
    
./Post n°11   Marquer comme non lu.
Thor Ecrit le: Dimanche 29 août 2004 à 14:23 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


Sasume :
Il me semble qu'en fait, le n° du handle est stocké au début du bloc mémoire alloué.
Ben je ne crois pas car sinon il faudrait allouer notre buffer + 2 octet (taille d'un short) or ce n'est pas le cas! :|
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°12   Marquer comme non lu.
GoldenCrystal Ecrit le: Dimanche 29 août 2004 à 17:26 Déconnecté(e)    Voir le profil de GoldenCrystal Envoyer un email à GoldenCrystal Visiter le site WEB de GoldenCrystal Envoyer un message privé à GoldenCrystal  

Sisi, c'est bien le cas =), quand tu alloue de la mémoire avec HeapAllocPtr (c à d malloc), il alloue un handle plus large de deux octets et stocke le handle au début de ce bloc. Mais c'est totalement transparent pour l'utilisateur.
Kupo !
    
./Post n°13   Marquer comme non lu.
Thor Ecrit le: Lundi 30 août 2004 à 16:50 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


GoldenCrystal :
Sisi, c'est bien le cas =), quand tu alloue de la mémoire avec HeapAllocPtr (c à d malloc), il alloue un handle plus large de deux octets et stocke le handle au début de ce bloc. Mais c'est totalement transparent pour l'utilisateur.
Ah OK mais si c'est transparent est ce qu'il est possible de récupérer ces 2 octets en utilisant le pointeur retourné par malloc moins 2 octets?
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°14   Marquer comme non lu.
GoldenCrystal Ecrit le: Lundi 30 août 2004 à 18:50 Déconnecté(e)    Voir le profil de GoldenCrystal Envoyer un email à GoldenCrystal Visiter le site WEB de GoldenCrystal Envoyer un message privé à GoldenCrystal  

Récupérer le handle, oui tu peux. Par contre il ne faut pas le modifier sinon HeapFreePtr (alias free) va foirer =)
Kupo !
    
./Post n°15   Marquer comme non lu.
Thor Ecrit le: Lundi 30 août 2004 à 19:47 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


Oui j'en doute !
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
  :: Index » Forum Ti68K » Programmation C » Adresse d'un pointeur (15 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 68.55ms avec 18 requetes