Bonsoir à toutes et à tous !
Alors je me suis mis à recoder la fonction mkdir du ms dos. Tout se passait bien jusqu'au moment ou je suis passer à la phase de test !
Lorsque je rentre des saisies supérieur à (ça peut varier) 10,15 caractères j'ai des erreurs d'allocations mémoires ? ! Je ne comprends pas, normalement mon pc à bien assez d'espace mémoire que pour réallouer un vecteur de 15 char !
De plus lorsque je saisi le mot "salut et que je debug ligne par ligne j'ai pu remarqué qu'il me balance un "no symbol table info available" lorsque je passe à la deuxième réallocation ? !
Et ensuite dans ma console il m'affiche bien "erreur d'allocation" mémoire. Mais si je saisi "salut" et que je debug normalement aucun message
d'erreur ? !
Je dois bien avouer que j'ai du mal à y voir clair ! Si quelqu'un pourrait éclairer ma chandelle ? !
En attendant voici le 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 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <malloc.h> #include <direct.h> int main(void) { char *buffer=NULL,*verrification=NULL; char saisie,caracter; int i,j; _chdir("C:\\"); do{ printf("C:\\>"); fflush(stdin); saisie=getchar(); if(saisie!=13) { if((buffer = malloc(1*sizeof(char)))==NULL)printf("Erreur d'allocation memoire\n"); // Si pas d'erreur à l'allocation on va garnir le buffer else { *buffer=saisie; i=1; do{ caracter=getchar(); if(caracter!='\n') { if((buffer = realloc (buffer,i*sizeof(char)))==NULL)printf("Erreur d'allocation memoire\n"); // Si pas d'erreur à la réallocation on continue à garnir le buffeur else { *(buffer+i)=caracter; i++; } } }while(caracter!='\n' && buffer!=NULL); buffer = realloc (buffer,i*sizeof(char)); *(buffer+i)='\0'; if((verrification=strstr(buffer,"cr "))!=NULL) { for(j=3;j<=i;j++)*(buffer+(j-3))=*(buffer+j); _mkdir(buffer); } } } for(i=0;i<strlen(buffer);i++)*(buffer+i)=toupper(*(buffer+i)); }while(strcmp(buffer,"EXIT")); free(buffer); return 0; }Je viens de me rendre compte qu'il y a déjà un problème du coté de i à la reallocation. Il ne devrait pas valoir 1 mais 2.
Donc ça devrait être *(buffer+(i-1))Amicalement crodilus.Problème résolu !
Partager