Allocation dynamique douteuse
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:
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;
} |
Citation:
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))
Citation:
Problème résolu !
Amicalement crodilus.