Accueil > Forum > > > > Pointeurs et Desallocation
Pointeurs et Desallocation
jeudi 16 septembre 2004 à 15:31:54 |
Pointeurs et Desallocation

gilimcce
|
Bonjour à tous.... je declare une fonction loadJpegImage(char *, unsigned char*, int*, int*) 1e parametre : le chemin de l'image chargee 2e // : le tableau (ou pointeur sur char) contenant l'image en question 3e et 4e // : les hauteur et largeur de l'image qui vont conditionner les dimensions du tableau dynamique cette fonction est appelee dans le main : unsigned char *text; int height, width; loadJpegImage(chemin, text, &width, &height); dans le corps de la fonction, la dimension de text est allouee dynamiquement : int loadJpegImage(char *fichier, unsigned char *texture, int *Pt_width, int *Pt_height) { .... .... .... texture = (unsigned char *)malloc(dim_gris*sizeof(unsigned char)); .... .... .... } Le souci intervient lorsque je souhaite : 1 - mapper mon objet => aucun mappage n'est effectue comme si le tableau etait vide 2 - desallouer la memoire => erreur a la compilation "Freeing inexistant memory" Ces deux actions sont faites au sein du main. Merci pour vos remarques et/ou suggestions.
|
|
jeudi 16 septembre 2004 à 16:21:09 |
Re : Pointeurs et Desallocation

jockos
|
C'est très simple...
loadJpegImage(char *, unsigned char**, int*, int*)
//////////////////////////////////////////////////// Dans le main :
unsigned char *text; int height, width; loadJpegImage(chemin, &text, &width, &height);
//////////////////////////////////////////////////// int loadJpegImage(char *fichier, unsigned char **texture, int *Pt_width, int *Pt_height) { .... .... ....
*texture = (unsigned char *)malloc(dim_gris*sizeof(unsigned char));
.... .... .... }
Voilà, la ça marchera bien...
Tu faisais une allocation dynamique (avec malloc) à l'interieur de ta fonction. Tu dois donc passé le pointeur (unsigned char *) par adresse afain que la valeur de 4 octets qu'il vaudra (retrourné par malloc) soit bien pris en compte à la sortie de ta fonction.
Quand tu alloues ou désalloues à l'interieur d'une fonction un pointeur, il faut toujours le passer en parmètre par adresse (par exemple char **). C'est une règle simple... et qui marche à tout les coup....
Prend le temps de bien réfléchir et tu comprendras le mécanisme...
Sinon, j'essaierais d'être plus clair...
++
|
|
jeudi 16 septembre 2004 à 22:57:43 |
Re : Pointeurs et Desallocation

djl
|
evitez le cast du malloc en c, c'est de toute facon inutile
|
|
vendredi 17 septembre 2004 à 07:46:26 |
Re : Pointeurs et Desallocation

jockos
|
malloc retourne un void *.
Donc, certain compilateur ne voudront pas compiler si tu ne cast pas le pointeur retourné par le malloc.
Donc, au contraire, le cast est justemen très utile et devrait être fait dans ous les cas pour éviter tout problème lié au compilo.
|
|
vendredi 17 septembre 2004 à 08:40:50 |
Re : Pointeurs et Desallocation

djl
|
c'est justement parce que ca retourne un void* que le cast n'est pas necessaire
a quoi sert le type void* en c ?
"certain compilateur ne voudront pas compiler si tu ne cast pas le pointeur retourné par le malloc"
un compilateur c++ oui, mais pas un compilateur c et on avais deja dis pourquoi ca pouvais etre dangereux en c le cast d'une valeur retour, tu cache au compilateur le type retour (qui sera int par defaut) dans le cas ou il genere lui meme la declaration (declaration implicite)
le cast du malloc + l'oubli d'inclure stdlib.h est la pire des erreurs
|
|
vendredi 17 septembre 2004 à 08:46:15 |
Re : Pointeurs et Desallocation

jockos
|
Désolé, c'est vrai que je parlais d'un compilateur C++.
Autant pour moi...
|
|
dimanche 19 septembre 2004 à 19:02:44 |
Re : Pointeurs et Desallocation

gilimcce
|
Bon... Si quelqu'un y comprend qq chose.... Avec le passage par adresse, je n'avais plus d'erreur de memoire. Mais le mappage, c'était pas vraiment ça, meme completement absent pour tout dire. Je suis revenu a quelque chose de basique :
un pointeur simple sur unsigned char pour ma variable texture qui contient les pixels de mon image. Histoire d'avoir les idees un peu plus claires.
du coup plus d'erreur de desallocation, mais pas plus de mappage que precedemment.
Je vous livre le code. J'espere que qq un aura la synthese qu'il m'a manque.
Merci....
///////////////////// MAIN ////////////////////////
int main(int argc, char **argv) { unsigned char *text; .... ....
/* Chargement de la texture */
text=loadJpegImage(chemin, &width, &height); .... ....
gluBuild2DMipmaps(GL_TEXTURE_2D,3,width,height,GL_RGB,GL_UNSIGNED_BYTE,text); .... .... }
///////////////////// IMAGE ////////////////////////
unsigned char *loadJpegImage(char *fichier, int *Pt_width, int *Pt_height) { .... ....
unsigned char *ligne; FILE *file;
int t_width = cinfo.image_width; int t_height = cinfo.image_height;
Pt_width = &(t_width); Pt_height = &(t_height);
if (cinfo.jpeg_color_space==JCS_GRAYSCALE) { int dim_gris = (t_width * t_height);
unsigned char *image_gris = (unsigned char *)malloc(dim_gris*sizeof(unsigned char)); if (image_gris == NULL){cout<<endl<<"Erreur d'allocation image_gris"<<endl;exit(0);}
unsigned char *texture = (unsigned char *)malloc(dim_gris*3*sizeof(unsigned char)); if (texture == NULL){cout<<endl<<"Erreur d'allocation texture"<<endl;exit(0);}
#ifdef PERFORM_MEMORY_CHEKS MEMCHEK_reportLeak(); #endif
jpeg_start_decompress(&cinfo); ligne=image_gris;
while (cinfo.output_scanline<cinfo.output_height) { ligne=image_gris+t_width*cinfo.output_scanline; jpeg_read_scanlines(&cinfo,&ligne,1); }
jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo);
// rearrangement de l'image scannee dans le tableau de texture 3D // ici nous sommes en niveau de gris, donc on copie le meme octet dans // chacune des 3 cases RGB
for (i=0;i<t_height;i++) for (j=0;j<t_width;j++) { texture[i*t_width*3+j*3 ] = image_gris[i*t_width+j]; texture[i*t_width*3+j*3+1] = image_gris[i*t_width+j]; texture[i*t_width*3+j*3+2] = image_gris[i*t_width+j]; }
free(image_gris);
return texture; } }
|
|
Cette discussion est classée dans : fonction, int, char, unsigned, loadjpegimage
Répondre à ce message
Sujets en rapport avec ce message
pb avec variable [ par jeffise57 ]
Please aidez moiJe reçoit comme arugument du fonction des variables unsigned char* et je doit passer dans une deuxième fonction les même arguments mai
Pour les doués, moi j'en peu plus ! [ par sena ]
Salutje voudrais en fait faire un passage de paramètre a une fonction dont un a une valeur par défaut. (puis inclure ca dnas une DLL)Par exemple une f
transformer un tableau 2d en image bitmap [ par gyzmo1 ]
Bonjour a tous, voilà mon problème, je suis en train de mettre en place une méthode de comparaison de signature manuscrites. Cette méthode s applique
comment afficher un pixel en VGA ? [ par LedPaL ]
Slt,je programme ac dev-cpp et j'arrive pas a afficher de pixels a l'écran !!! de l'aide plz !!voici un bout de ma source:unsigned char * ecran = (uns
tableaux de chaines en argument de fonction [ par ashboody ]
je dispose d'une fonction connect a laquelle je doit passer un tableau de chaine char **RegisteredChannels_Name. Pour cela je déclare mon tableau dans
Comment forcer le RTS pour une liaison RS232 [ par ancat ]
Bonjourje viens de faire un petit prog (grandement inspire de sources du site) mais je ne saisis pas trop le controle du RTS.Celui ci est-il traite pa
[C] Méthode (Fonction, procédure) interne, locale [ par nitrique ]
Bonjour @ tous,J'aimerais faire un fonction locale (c'est à dire: Dans ma fonction)Mais ça pête.int SaisiePasse(char matricule[lMaxCode]) { char to
Variable de type char [ par wolfcyber ]
bonjour, J'aimerais savoir l'equivalent en C++ de la fonction "Mid(int nStart,int nCount)" de la classe CString, pour une variable de type char. Cet
Convertir un Int en Char [ par MaxSoldier ]
Bonjours, tout d'abord, j'aimerai m'excuser car je sais que cette question a déjà été posée des milliards de fois mais, je n'ai jamais réussi à faire
Livres en rapport
|
Derniers Blogs
[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2 par ROMELARD Fabrice
Avec la dernière génération du lecteur MP3 de Microsoft, le ZUNE HD, Microsoft a publié une nouvelle version du logiciel pour PC. Ainsi, je me suis décidé à installer celle-ci sur mon Tablet PC ACER, comme toujours le logiciel est donc tél...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CLISTCTRLCLISTCTRL par dorras7
Cliquez pour lire la suite par dorras7
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|