1 pièce(s) jointe(s)
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
Pièce jointe 62461
voici mon code,
Code:
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:
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