problème de libération de l'éspace dynamique allouée
3 réponses
programmation
Bonsoir,
J'ai un fichier contient deux champs: objet et attribut nomm=E9
"exemple.txt" :
2 11
4 11
10 10
5 O1
.....
.....
Sachant que on a la m=EAme taille pour tous les attributs de tous les
objets dans notre exemple on a la taille =3D 2.
Cette taille peut changer d'un exemple =E0 l'autre donc on ne connait
pas la taille d'attribut en avance.
Je voudrais calculer la taille de l'attribut puis v=E9rifier si on dans
ce fichier si on a au moins un objet qui poss=E8de un attribut tout =E0 1
c'est =E0 dire la chaine "11" dans notre cas.
la fonction verifier() nous retourne 1 si il existe la chaine "11"
sinon O.
int main()
{
FILE *fp;
int trouve=3D0,taille;
fp=3Dfopen("exemple.txt");
While (fgets(s,100,fp))
sscanf(s,"%d%s",&objet,attribut);
taille=3Dstrlen(attribut);
trouve =3D verifier(taille);
printf("valeur de retour %d\n",trouve);
return 0;
}
Mais, le message suivant n'affiche pas:
printf("valeur de retour %d\n",trouve);
-Pourquoi ?
lorsque je lance l'ex=E9cution apr=E8s la compilation j'ai le message
suivant:
HEAP CORRUPTION DETECTED : after normal (#95) at 0*01020068.
CRT detected that the application wrote to memory after end of heap
buffer.
Ceci =E0 cause d 'instruction free chaine(); dans la fonction verifier
() car je supprime cette instruction donc l'exection se passe.
Mais, comment on va liberer l'espace dynamique lou=E9e par chaine
[taille] ?
- l'allocation et la lib=E9ration de l'espace dynamique char *chaine est
bien d=E9finie ?
- Existe-t-il le type boolean comme un type des donn=E9es ? comment le
d=E9clare ?
- On peut utiliser le type boolean comme valeur de retour pour la
fonction verifier() ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian ASTOR
On 17 août, 00:35, programmation wrote:
lorsque je lance l'exécution après la compilation j'ai le message suivant: HEAP CORRUPTION DETECTED : after normal (#95) at 0*01020068. CRT detected that the application wrote to memory after end of heap buffer.
Ce code n'est pas compilable : fopen() avec 1 seul paramètre, pFTrie à la place de fp, &objet au lieu de object dans sscanf(),... Et écriture en dehors de l'espace alloué à chaine[taille]=' ';
On 17 août, 00:35, programmation <bouali.a...@gmail.com> wrote:
lorsque je lance l'exécution après la compilation j'ai le message
suivant:
HEAP CORRUPTION DETECTED : after normal (#95) at 0*01020068.
CRT detected that the application wrote to memory after end of heap
buffer.
Ce code n'est pas compilable : fopen() avec 1 seul paramètre, pFTrie
à la place de fp, &objet au lieu de object dans sscanf(),...
Et écriture en dehors de l'espace alloué à
chaine[taille]=' ';
lorsque je lance l'exécution après la compilation j'ai le message suivant: HEAP CORRUPTION DETECTED : after normal (#95) at 0*01020068. CRT detected that the application wrote to memory after end of heap buffer.
Ce code n'est pas compilable : fopen() avec 1 seul paramètre, pFTrie à la place de fp, &objet au lieu de object dans sscanf(),... Et écriture en dehors de l'espace alloué à chaine[taille]=' ';
programmation
On 17 août, 15:40, Christian ASTOR wrote:
On 17 août, 00:35, programmation wrote:
> lorsque je lance l'exécution après la compilation j'ai le message > suivant: > HEAP CORRUPTION DETECTED : after normal (#95) at 0*01020068. > CRT detected that the application wrote to memory after end of heap > buffer.
Ce code n'est pas compilable : fopen() avec 1 seul paramètre, pFTrie à la place de fp, &objet au lieu de object dans sscanf(),... Et écriture en dehors de l'espace alloué à chaine[taille]=' ';
int main() { FILE *fp; char s[100],attribut[32]; int trouve=0,taille,objet; fp=fopen("exemple.txt","r"); while (fgets(s,100,fp)!= NULL) sscanf(s,"%d%s",&objet,attribut); taille=strlen(attribut); trouve = verifier(taille); printf("valeur de retour %dn",trouve);
return 0; }
On 17 août, 15:40, Christian ASTOR <casto...@club-internet.fr> wrote:
On 17 août, 00:35, programmation <bouali.a...@gmail.com> wrote:
> lorsque je lance l'exécution après la compilation j'ai le message
> suivant:
> HEAP CORRUPTION DETECTED : after normal (#95) at 0*01020068.
> CRT detected that the application wrote to memory after end of heap
> buffer.
Ce code n'est pas compilable : fopen() avec 1 seul paramètre, pFTrie
à la place de fp, &objet au lieu de object dans sscanf(),...
Et écriture en dehors de l'espace alloué à
chaine[taille]=' ';
int main()
{
FILE *fp;
char s[100],attribut[32];
int trouve=0,taille,objet;
fp=fopen("exemple.txt","r");
while (fgets(s,100,fp)!= NULL)
sscanf(s,"%d%s",&objet,attribut);
taille=strlen(attribut);
trouve = verifier(taille);
printf("valeur de retour %dn",trouve);
> lorsque je lance l'exécution après la compilation j'ai le message > suivant: > HEAP CORRUPTION DETECTED : after normal (#95) at 0*01020068. > CRT detected that the application wrote to memory after end of heap > buffer.
Ce code n'est pas compilable : fopen() avec 1 seul paramètre, pFTrie à la place de fp, &objet au lieu de object dans sscanf(),... Et écriture en dehors de l'espace alloué à chaine[taille]=' ';
int main() { FILE *fp; char s[100],attribut[32]; int trouve=0,taille,objet; fp=fopen("exemple.txt","r"); while (fgets(s,100,fp)!= NULL) sscanf(s,"%d%s",&objet,attribut); taille=strlen(attribut); trouve = verifier(taille); printf("valeur de retour %dn",trouve);
return 0; }
Christian ASTOR
On 17 août, 17:05, programmation wrote:
Voici, j'ai le modifie. Mais, le même problème.
Non, tu n'as pas modifié chaine[taille]=' '; en chaine[taille-1]=' '; puisque tu débordes...
On 17 août, 17:05, programmation <bouali.a...@gmail.com> wrote:
Voici, j'ai le modifie. Mais, le même problème.
Non, tu n'as pas modifié
chaine[taille]=' ';
en
chaine[taille-1]=' ';
puisque tu débordes...