diff --git a/Compte Rendu PA.pdf b/Compte Rendu PA.pdf
index 7895d5fdb0032babba0eb5d739c150dccc625c6d..75a71f46975f39a409f0b35a8d60e7aed0775842 100644
Binary files a/Compte Rendu PA.pdf and b/Compte Rendu PA.pdf differ
diff --git a/initializeData.c b/initializeData.c
index 297a735713d34a979c0aaef66470407d3abb1263..d095891053de4754ebafd7f8fd70401464a2d50f 100644
--- a/initializeData.c
+++ b/initializeData.c
@@ -95,7 +95,7 @@ void create_flight (Flight **fl, char **line, const char separators[])
     }
     else
     {
-        (*fl)->airline = word;
+        (*fl)->airline = strdup (word);
     }
     word = strsep (line, separators);
     if (strcmp (word, "") == 0)
@@ -104,7 +104,7 @@ void create_flight (Flight **fl, char **line, const char separators[])
     }
     else
     {
-        (*fl)->org_air = word;
+        (*fl)->org_air = strdup (word);
     }
     word = strsep (line, separators);
     if (strcmp (word, "") == 0)
@@ -113,7 +113,7 @@ void create_flight (Flight **fl, char **line, const char separators[])
     }
     else
     {
-        (*fl)->dest_air = word;
+        (*fl)->dest_air = strdup (word);
     }
     word = strsep (line, separators);
     if (strcmp (word, "") == 0)
@@ -274,8 +274,9 @@ void load_flights (Table_hash_airlines *thal, Table_hash_airports *thap, FILE *f
 
     while (getline (&line, &len, fd) != -1) // on récupère chaque ligne.
     {
+        char *  line2      = line;
         Flight *new_flight = malloc (sizeof (Flight));
-        create_flight (&new_flight, &line, separators);
+        create_flight (&new_flight, &line2, separators);
 
         Liste_Airlines *l = thal->tab_airlines[hash_function_airline (new_flight->airline)];
 
@@ -372,6 +373,9 @@ void free_all_airlines (Table_hash_airlines *thal)
                     {
                         Flight *tmp                          = thal->tab_airlines[i]->liste_flights;
                         thal->tab_airlines[i]->liste_flights = NULL;
+                        free (tmp->airline);
+                        free (tmp->org_air);
+                        free (tmp->dest_air);
                         free (tmp);
                     }
                     else
@@ -379,6 +383,9 @@ void free_all_airlines (Table_hash_airlines *thal)
                         Flight *tmp                          = thal->tab_airlines[i]->liste_flights;
                         thal->tab_airlines[i]->liste_flights = thal->tab_airlines[i]->liste_flights->suiv_airline;
                         tmp->suiv_airline                    = NULL;
+                        free (tmp->airline);
+                        free (tmp->org_air);
+                        free (tmp->dest_air);
                         free (tmp);
                     }
                 }
@@ -409,3 +416,29 @@ void free_all_airports (Table_hash_airports *thap)
         }
     }
 }
+
+int is_empty_airlines (Table_hash_airlines thal)
+{
+    for (int i = 0; i < AIRLINE_SIZE_TABLE; i++)
+    {
+        if (thal.tab_airlines[i] != NULL)
+        {
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+int is_empty_airports (Table_hash_airports thap)
+{
+    for (int i = 0; i < AIRPORT_SIZE_TABLE; i++)
+    {
+        if (thap.tab_airports[i] != NULL)
+        {
+            return 1;
+        }
+    }
+
+    return 0;
+}
diff --git a/initializeData.h b/initializeData.h
index 56d9f6cb40315a012ee21f1dac761308bee80be5..185be28b862526b442da85f9d23f65b8e155df61 100644
--- a/initializeData.h
+++ b/initializeData.h
@@ -114,3 +114,7 @@ int hash_function_airport (char *);
 void free_all_airlines (Table_hash_airlines *);
 
 void free_all_airports (Table_hash_airports *);
+
+int is_empty_airlines (Table_hash_airlines);
+
+int is_empty_airports (Table_hash_airports);
diff --git a/main.c b/main.c
index 6fe2927bc6e8dfb56f3af64e1937dec65d862cdb..2c4e1283edebaa2cca63615b741784fa9361304d 100644
--- a/main.c
+++ b/main.c
@@ -26,136 +26,153 @@ int main ()
         load_airports (&thap, airport_file);
     }
 
-    if (flights_file != NULL)
+    if (flights_file != NULL && (is_empty_airlines (thal) == 1 && is_empty_airports (thap) == 1))
     {
         load_flights (&thal, &thap, flights_file);
     }
-
-    printf ("Chargement terminé !\n");
-
-    char * requetes    = NULL;
-    char * commande    = NULL;
-    char * airline_id  = NULL;
-    char * airport_id1 = NULL;
-    char * airport_id2 = NULL;
-    char * date        = NULL;
-    char * time        = "";
-    char * limit       = "";
-    size_t len         = 0;
-
-    while (getline (&requetes, &len, stdin) != -1)
+    if (is_empty_airlines (thal) == 0 || is_empty_airports (thap) == 0)
     {
-        commande = strsep (&requetes, " ");
-        commande = strtok (commande, "\n");
-        if (strcmp (commande, "quit") == 0)
-        {
-            break;
-        }
-        else if (strcmp (commande, "show-airports") == 0)
-        {
-            airline_id = strsep (&requetes, " \n");
-            printf ("> Resultat de la requete %s %s :\n", commande, airline_id);
-            printf ("\n");
-            show_airports (airline_id, thal, thap);
-        }
-        else if (strcmp (commande, "show-airlines") == 0)
-        {
-            airport_id1 = strsep (&requetes, " \n");
-            printf ("> Resultat de la requete %s %s :\n", commande, airport_id1);
-            printf ("\n");
-            show_airlines (airport_id1, thal, thap);
-        }
-        else if (strcmp (commande, "show-flights") == 0)
+        printf ("Chargement des fichiers impossible, veuillez vérifier les fichiers !\n");
+    }
+    else
+    {
+        printf ("Chargement terminé !\n");
+
+        char * requetes    = NULL;
+        char * commande    = NULL;
+        char * airline_id  = NULL;
+        char * airport_id1 = NULL;
+        char * airport_id2 = NULL;
+        char * date        = NULL;
+        char * time        = "";
+        char * limit       = "";
+        size_t len         = 0;
+
+        while (getline (&requetes, &len, stdin) != -1)
         {
-            airport_id1 = strsep (&requetes, " \n");
-            date        = strsep (&requetes, " \n");
-            time        = strsep (&requetes, " \n");
-            limit       = strsep (&requetes, " \n");
-
-            if (limit == NULL)
+            char *requetes2 = requetes;
+            commande        = strsep (&requetes2, " ");
+            commande        = strtok (commande, "\n");
+            if (strcmp (commande, "quit") == 0)
+            {
+                break;
+            }
+            else if (strcmp (commande, "show-airports") == 0)
+            {
+                airline_id = strsep (&requetes2, " \n");
+                printf ("> Resultat de la requete %s %s :\n", commande, airline_id);
+                printf ("\n");
+                show_airports (airline_id, thal, thap);
+            }
+            else if (strcmp (commande, "show-airlines") == 0)
             {
+                airport_id1 = strsep (&requetes2, " \n");
                 printf ("> Resultat de la requete %s %s :\n", commande, airport_id1);
                 printf ("\n");
-                show_flights (airport_id1, thap, date, 0);
+                show_airlines (airport_id1, thal, thap);
             }
-            else
+            else if (strcmp (commande, "show-flights") == 0)
             {
-                if (strcmp (time, "") != 0 && strcmp (limit, "") != 0)
+                airport_id1 = strsep (&requetes2, " \n");
+                date        = strsep (&requetes2, " \n");
+                time        = strsep (&requetes2, " \n");
+                limit       = strsep (&requetes2, " \n");
+
+                if (limit == NULL)
                 {
-                    printf ("> Resultat de la requete %s %s %s %s :\n", commande, airport_id1, time, limit);
+                    printf ("> Resultat de la requete %s %s :\n", commande, airport_id1);
                     printf ("\n");
-                    show_flights (airport_id1, thap, date, 2, time, limit);
+                    show_flights (airport_id1, thap, date, 0);
                 }
-                if (strcmp (time, "") != 0 && strcmp (limit, "") == 0)
+                else
                 {
-                    printf ("> Resultat de la requete %s %s %s :\n", commande, airport_id1, time);
-                    printf ("\n");
-                    show_flights (airport_id1, thap, date, 1, time);
-                }
-                if (strcmp (time, "") == 0 && strcmp (limit, "") != 0)
-                {
-                    printf ("> Resultat de la requete %s %s %s :\n", commande, airport_id1, limit);
-                    printf ("\n");
-                    show_flights (airport_id1, thap, date, 1, limit);
+                    if (strcmp (time, "") != 0 && strcmp (limit, "") != 0)
+                    {
+                        printf ("> Resultat de la requete %s %s %s %s :\n", commande, airport_id1, time, limit);
+                        printf ("\n");
+                        show_flights (airport_id1, thap, date, 2, time, limit);
+                    }
+                    if (strcmp (time, "") != 0 && strcmp (limit, "") == 0)
+                    {
+                        printf ("> Resultat de la requete %s %s %s :\n", commande, airport_id1, time);
+                        printf ("\n");
+                        show_flights (airport_id1, thap, date, 1, time);
+                    }
+                    if (strcmp (time, "") == 0 && strcmp (limit, "") != 0)
+                    {
+                        printf ("> Resultat de la requete %s %s %s :\n", commande, airport_id1, limit);
+                        printf ("\n");
+                        show_flights (airport_id1, thap, date, 1, limit);
+                    }
                 }
             }
-        }
-        else if (strcmp (commande, "most-delayed-flights") == 0)
-        {
-            printf ("> Resultat de la requete %s :\n", commande);
-            printf ("\n");
-            most_delayed_flights (thal);
-        }
-        else if (strcmp (commande, "most-delayed-airlines") == 0)
-        {
-            printf ("> Resultat de la requete %s :\n", commande);
-            printf ("\n");
-            most_delayed_airlines (thal);
-        }
-        else if (strcmp (commande, "delayed-airline") == 0)
-        {
-            airline_id = strsep (&requetes, " \n");
+            else if (strcmp (commande, "most-delayed-flights") == 0)
+            {
+                printf ("> Resultat de la requete %s :\n", commande);
+                printf ("\n");
+                most_delayed_flights (thal);
+            }
+            else if (strcmp (commande, "most-delayed-airlines") == 0)
+            {
+                printf ("> Resultat de la requete %s :\n", commande);
+                printf ("\n");
+                most_delayed_airlines (thal);
+            }
+            else if (strcmp (commande, "delayed-airline") == 0)
+            {
+                airline_id = strsep (&requetes2, " \n");
 
-            printf ("> Resultat de la requete %s %s :\n", commande, airline_id);
-            printf ("\n");
-            delayed_airline (airline_id, thal);
-        }
-        else if (strcmp (commande, "most-delayed-airlines-at-airport") == 0)
-        {
-            airport_id1 = strsep (&requetes, " \n");
+                printf ("> Resultat de la requete %s %s :\n", commande, airline_id);
+                printf ("\n");
+                delayed_airline (airline_id, thal);
+            }
+            else if (strcmp (commande, "most-delayed-airlines-at-airport") == 0)
+            {
+                airport_id1 = strsep (&requetes2, " \n");
 
-            printf ("> Resultat de la requete %s %s :\n", commande, airport_id1);
-            printf ("\n");
-            most_delayed_airlines_at_airport (airport_id1, thal, thap);
-        }
-        else if (strcmp (commande, "changed-flights") == 0)
-        {
-            date = strsep (&requetes, " \n");
+                printf ("> Resultat de la requete %s %s :\n", commande, airport_id1);
+                printf ("\n");
+                most_delayed_airlines_at_airport (airport_id1, thal, thap);
+            }
+            else if (strcmp (commande, "changed-flights") == 0)
+            {
+                date = strsep (&requetes2, " \n");
 
-            printf ("> Resultat de la requete %s %s :\n", commande, date);
-            printf ("\n");
-            changed_flights (date, thal);
-        }
-        else if (strcmp (commande, "avg-flight-duration") == 0)
-        {
-            airport_id1 = strsep (&requetes, " \n");
-            airport_id2 = strsep (&requetes, " \n");
+                printf ("> Resultat de la requete %s %s :\n", commande, date);
+                printf ("\n");
+                changed_flights (date, thal);
+            }
+            else if (strcmp (commande, "avg-flight-duration") == 0)
+            {
+                airport_id1 = strsep (&requetes2, " \n");
+                airport_id2 = strsep (&requetes2, " \n");
 
-            printf ("> Resultat de la requete %s %s %s :\n", commande, airport_id1, airport_id2);
+                printf ("> Resultat de la requete %s %s %s :\n", commande, airport_id1, airport_id2);
+                printf ("\n");
+                avg_flight_duration (airport_id1, airport_id2, thap);
+            }
+            else
+            {
+                printf ("Vous avez entré une mauvaise requête ! Veuillez réessayer !\n");
+            }
             printf ("\n");
-            avg_flight_duration (airport_id1, airport_id2, thap);
         }
-        else
-        {
-            printf ("Vous avez entré une mauvaise requête ! Veuillez réessayer !\n");
-        }
-        printf ("\n");
-    }
 
-    printf ("Le programme va prendre fin ...\n");
+        printf ("Le programme va prendre fin ...\n");
+
+        free_all_airlines (&thal);
+        free_all_airports (&thap);
+        free (requetes);
+    }
 
-    free_all_airlines (&thal);
-    free_all_airports (&thap);
+    if (is_empty_airlines (thal) == 1)
+    {
+        free_all_airlines (&thal);
+    }
+    if (is_empty_airports (thap) == 1)
+    {
+        free_all_airports (&thap);
+    }
 
     fclose (airline_file);
     fclose (airport_file);