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))
Problème résolu !
Amicalement crodilus.