IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

désallouer un tableau de pointeur de char


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    496
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 496
    Points : 123
    Points
    123
    Par défaut désallouer un tableau de pointeur de char
    bonjour
    je voulais extraire les données binaires (en hexa) d'un fichier .jpg!
    j'ai bien commencé mais lorsque je veux delete le tableau de char** j'ai un message d'erreur
    Nom : Capturer.JPG
Affichages : 558
Taille : 32,9 Ko
    voici mon code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    #include <string>
    #include <bitset> // pour pouvoir utiliser la classe ... bitset
    #include <limits.h> // pour pouvoir disposer de la constante CHAR_BIT
    #include <iostream> // pour pouvoir disposer de cout
    #include <fstream> // pour pouvoir disposer de... ifstream
    #include<cstdio>
    using namespace std;
     
    int main (void)
    {
    	std::ifstream ifs3("G:\\Documents\\Pictures\\2010 TEST\\0004.jpg",std::ios::binary);
    	  if (!ifs3.is_open())
    		cout << "Impossible d'ouvrir le fichier en lecture !" << endl;
    	  else
    	  {
    		// sauvegarder la position courante
    				 long pos=ifs3.tellg();
    				 cout<<pos<<endl;
    		// se placer en fin de fichier
    				 ifs3.seekg(0,std::ios_base::end);
    		// récupérer la nouvelle position = la taille du fichier
    				 long size=ifs3.tellg();
    				 cout<<dec<<size<<endl;
    		// restaurer la position initiale du fichier
    				 ifs3.seekg(pos,std::ios_base::beg);
    		char **tfs3;
    		tfs3=new char*[size];
    		char ctmpfs3;
    		  int i=0;
    		  int j=0;
    		  int n=0;
    		  int a=0;
     
    		for( i=0; i<((size+1)/4); ++i)
    		{
    			cout<<endl<<n<<"  ";
     
    			tfs3[i]=new char[3];
    			for( j=0; j<4; ++j)
    			{
    				ifs3.read(&ctmpfs3,1);
    				tfs3[i][j]=ctmpfs3;
    				//cout<<tfs3[n][j];
    				// pour l'affichage binaire, nous passons par un bitset 
    				std::bitset<CHAR_BIT> bsfs3(ctmpfs3);
    			   // std::cout<<uppercase<<"binaire : "<<bs<< "   ";//uppercase  affiche en majuscule
    				// affichage du charactère 
    			   // std::cout<<" char <<"<<d<< "<<   ";
    				// pour provoquer l'affichage sous forme hexadécimale 
    				 a=bsfs3.to_ulong();
    				std::cout<<" "<<std::hex<<a;//(int)d;
    				/* pour provoquer l'affichage sous la forme décimale */
    				//std::cout<<" decimal : "<<dec<<a<<std::endl<<endl<<endl;
    			}
    			n=n+4;
    		}  
    		ifs3.close();
    		// si fichier JPEG Tous les fichiers JPEG commencent par la valeur hexadécimale '0xFFD8' signifie SOI (Start Of Image)
    			 std::bitset<CHAR_BIT> bsfs3(tfs3[0][0]);
    			if (bsfs3==0xFF)
    			{
    				std::bitset<CHAR_BIT> bsfs3(tfs3[0][1]);
    				if(bsfs3==0xD8)
    					cout<<" Jpeg "<<endl;
    			}
    //plus besoin du tableau
    		// D'abord on libère le contenu du tableau
    		for( i=0; i<(size/4); ++i)
    		{
    			delete[](tfs3[i]);
    		}
    		// Puis on libère le tableau
    		delete[] tfs3;
    	  }
    }
    la partie qui provoque l'erreur est tout à la fin, après plus besoin du tableau!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //plus besoin du tableau
    		// D'abord on libère le contenu du tableau
    		for( i=0; i<(size/4); ++i)
    		{
    			delete[](tfs3[i]);
    		}
    		// Puis on libère le tableau
    		delete[] tfs3;
    même pour le reste j'accepte toutes critiques ou autres méthodes

  2. #2
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Juin 2009
    Messages : 33
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Je ne sais pas si c'est la cause de l'erreur, mais lors de la création des tfs3[i], la boucle 'for' va de 0 jusqu'à ((size+1)/4), et lors de la destruction des tfs3[i], elle va de 0 jusqu'à seulement (size/4). Peut-être que cela n'influe pas beaucoup, mais c'est quand même déstabilisant pour le lecteur .

    De plus, je ne comprend pas pourquoi tfs3 est un tableau de char* de taille 'size', alors que lors de la création des tfs3[i], tu t'arrêtes environ à size/4.

    Micro critiques : Si 'tfs3' et autres 'ctmpfs3' (à mes souhaits !! ) sont des abréviations, dis-nous à quoi cela correspond pour qu'on puisse comprendre le fonctionnement global du programme.

    J'espère t'avoir aidé.

  3. #3
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    std::vector svp ...

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    496
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 496
    Points : 123
    Points
    123
    Par défaut
    merci "Getrix"
    oui je sais c'est suite à des modif mais le pb est bien la destructionmerci aussi "Joel F" mais comme je débute en C++ , je ne connais pas du tout ce que c'est "les vecteur" si tu as une explication ou un bon tuto , je suis preneur

  5. #5
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921

Discussions similaires

  1. Tableau de pointeur char/tableau char 2D
    Par Taiki dans le forum Débuter
    Réponses: 8
    Dernier message: 21/04/2011, 12h06
  2. Réponses: 1
    Dernier message: 22/12/2009, 11h40
  3. Tableau de pointeurs const char *
    Par matafan dans le forum C
    Réponses: 5
    Dernier message: 26/11/2008, 14h32
  4. Allocation dynamique: Tableau de pointeur sur char
    Par Anonymouse dans le forum Débuter
    Réponses: 4
    Dernier message: 21/10/2007, 10h57
  5. [Debutant]Tableau de pointeur char (char *)
    Par nephhh dans le forum Débuter
    Réponses: 8
    Dernier message: 03/11/2006, 00h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo