Bonjour tout le monde, je suis lycéen et en stage, au cours de ce stage, j ai été chargé de développer un petit programme, qui doit ouvrir un fichier (.wbp), récupérer certaines valeurs inscrites dedans, et les recopier a la suite dans un autre fichier (.keyframe).
Le tout devant être le plus flexible possible.

Puisque je ne sais pas combien de valeurs je vais récupérer, j'ai appris sur le tas (en lisant les docs) a utiliser malloc, calloc, realloc et free, et je pense avoir compris le concept.

Cependant, lorsque je test mon programme, realloc me renvoie systématiquement un pointeur NULL, ce qui me bloque en plein milieu, et quand je passe les realloc, c'est free qui refuse de me renvoyer un pointeur NULL

Voici le code:
Mes declarations de variables et define:
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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MP "MarkerPosition" 
#define tcache 64           
#define tnom 50             
 
__________________
 
int main (int argc, char *argv[])
{
    /*
    int *:
    -tabPos: Tableau Positions, tableau dynamique contenant les positions (MarkerPositions)
    -argv:Nom complet des fichiers wbp a la suite
    -argc:Nombre de fichiers a ouvrir +1
 
    unsigned int:
    -pkmn: touche perso & compteur de .wbp fini (pour la boucle principale)
    -nbrPos: Compteur de positions trouvées
    -end : Sert lors de la recuperation des positions, a detecter quand les chaines recupérées ne sont plus valide afin de sortir de la boucle.
 
    char:
    -nom[]: Nom du fichier .wbp a ouvrir, puis du .keyframe a creer
    -cache[]: Sert pour retrouver les "MarkerPositionX" dans le .wbp
 
    FILE*:
    -wbp: Fichier wbp
    -kf: Fichier KeyFrame
    */
 
    int *tabPos=NULL;
    unsigned int pkmn=1, nbrPos=0, end = 0, curseur=0;
    char nom[tnom]={0}, cache[tcache]={0};
    FILE* wbp=NULL;
    FILE* kf=NULL;
Ici mon utilisation de calloc (seule fonction fonctionnant):

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
 
int * memoryCreate ()       //Allouer la memoire
//VARIABLES
     //I: /
     //O: tabPos (tableau dynamique)
{
    int * tabPos = NULL;
    int bcl=0;
    //Allouer tabPos (une case de memoire) avec calloc (pour la mettre a 0)
    printf("-Creation du tableau de memoire...");
    do
    {
        tabPos = calloc (sizeof(int),1);
        bcl=bcl+1;
        if (tabPos==NULL && bcl>3)  //Si tabPos n'a toujours pas été alloué au bout de trois tentatives
        {
            printf("FAIL\nAllocation de mémoire impossible\nErreur %d\n__________\n", errno);
            exit(EXIT_FAILURE); //Indiquer l erreur et sortir du programme
        }
    }while (tabPos == NULL);  //Tant que la memoire n'a pas été alloué
    printf("OK\n");
    return tabPos;
}
Ici la fonction utilisant realloc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
int * tabUp (int* tabPos, int nbrPos)
{
    int * save=NULL;
    printf("Reallocation...");
    //Reallouer tabPos avec une case de plus
    do
    {
        save = (int *) realloc (tabPos, nbrPos * sizeof(int));
    }while (save == NULL);
    printf("OK\n");
    return (int *) save;
}
Et mon free:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
//Liberer la memoire
            printf("Liberation de la memoire...");
            while (tabPos!=NULL)
            {
                free(tabPos);
            }
            printf("OK\n");
Je travaille sous Windows avec Code::Blocks, les seuls messages d'erreurs sont deux bout de codes déclaré inatteignable, mais n'ayant aucun lien avec ces fonctions (l'un est le return 0; precedé de exit(EXIT_SUCCESS);, vu que C::B rale sans son return 0;, et l'autre est dans une tout autre fonction, un if suivant une boucle, je ne vois pas pourquoi il me le déclare inatteignable, mais cette partie la fonctionnant, ce n'est pas ma priorité...

TLR: Je n'arrive pas a utiliser realloc correctement, j'ai beau comparer a la doc je ne trouve pas mon erreur: que faire?