diff --git a/src/Directory.c b/src/Directory.c
index fe59d12efae6959fc423728d555fa82cebbc3d1d..c861090b15d5bad4759e0f4fdff3d9793b7abb07 100644
--- a/src/Directory.c
+++ b/src/Directory.c
@@ -63,6 +63,8 @@ static void rebuild_index(Directory *directory) {
             break;
         }
     }
+
+    fclose(fp);
 }
 
 Directory *Directory_init(char database_filename[100]) {
@@ -111,6 +113,7 @@ void Directory_print(Directory *directory) {
     }
 
     printf("========================\n");
+    fclose(fp);
 }
 
 bool Directory_append(Directory *directory, DirectoryRecord *record) {
@@ -131,7 +134,7 @@ bool Directory_append(Directory *directory, DirectoryRecord *record) {
     fwrite(byte_array->items, 1, byte_array->size, fp);
     ByteArray_destroy(&byte_array);
 
-    uint64_t data_ptr = (uint64_t)ftell(fp) - 55;
+    uint64_t data_ptr = (uint64_t)ftell(fp) - DirectoryRecord_size_on_disk();
     fclose(fp);
 
     bptree_insert(directory->index, hash_string(record->phone_number), data_ptr);
@@ -152,6 +155,8 @@ DirectoryRecord *Directory_search(Directory *directory, char phone_number[11]) {
         ByteArray *byte_array = ByteArray_init(DirectoryRecord_size_on_disk());
         fread(byte_array->items, 1, DirectoryRecord_size_on_disk(), fp);
         byte_array->size = DirectoryRecord_size_on_disk();
+        fclose(fp);
+
         DirectoryRecord *record = ByteArray_to_DirectoryRecord(byte_array);
         ByteArray_destroy(&byte_array);
         return record;
diff --git a/src/DirectoryRecord.c b/src/DirectoryRecord.c
index 7ca5d49d72093921250c3110264b8db5142e27e0..3ab7027cfe774ce5630200f8fe3170170daa13b2 100644
--- a/src/DirectoryRecord.c
+++ b/src/DirectoryRecord.c
@@ -49,15 +49,15 @@ ByteArray *DirectoryRecord_to_ByteArray(DirectoryRecord *record) {
     ByteArray *array = ByteArray_init(capacity);
     ByteArray_append(array, (uint8_t)record->deleted);
 
-    for (int j = 0; j < PHONE_NUMBER_MAX_LENGTH - 1; j++) {
+    for (int j = 0; j < PHONE_NUMBER_MAX_LENGTH_WITHOUT_NULL_CHARACTER; j++) {
         ByteArray_append(array, (uint8_t)record->phone_number[j]);
     }
 
-    for (int j = 0; j < NAME_MAX_LENGTH - 1; j++) {
+    for (int j = 0; j < NAME_MAX_LENGTH_WITHOUT_NULL_CHARACTER; j++) {
         ByteArray_append(array, (uint8_t)record->name[j]);
     }
 
-    for (int j = 0; j < SURNAME_MAX_LENGTH - 1; j++) {
+    for (int j = 0; j < SURNAME_MAX_LENGTH_WITHOUT_NULL_CHARACTER; j++) {
         ByteArray_append(array, (uint8_t)record->surname[j]);
     }