realloc error reding file : I have problem with this code.
Some times it runs perfectly but another times it stops before the last print with the error message: "Error in './ga': realloc(): invalid pointer: 0x00007f97d1304ac6".
I'm go crazy because I'm not use realloc()!
I suspect that there is somethink wrong in the file reding part, because this problem comes out when I add this part to the code (previously I set the data with other two arrays).

    #include <limits> // std::numeric_limits<double>
    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/time.h>
    #include <utility>
    //#include <math.h>
    #include <algorithm>	// std::lower_bound, std::find
    #include <random>
    #include <cmath> 
    #include <cstring>
    #include <iomanip>      // std::setprecision
    #include <vector>       // std::vector
    
    #define NUM_CITIES 14 
    
    long size_pop;
    long tot_elem;
    
    
    int main(int argc, char *argv[]) {
    
    	size_pop = atol(argv[1]);
    
    	std::cout << size_pop << "\n";
    
    	std::cout << "double: " << sizeof(double) << "\n";
    	std::cout << "float: " << sizeof(float) << "\n";
    	std::cout << "int: " << sizeof(int) << "\n";
    	std::cout << "long: " << sizeof(long) << "\n";
    
    	tot_elem = NUM_CITIES * size_pop;
    	std::cout << "tot_elem: " << tot_elem << "\n";
    
    
    
    	// std::cin.get() != '\n';
    
    	struct timeval start, end, setup_start, setup_end, fitness_start, fitness_end, next_gen_start, next_gen_end, sort_start, sort_end;
    	struct timeval fitness_total_start, fitness_total_end, probability_start, probability_end, selection_start, selection_end;
    	struct timeval crossover_start, crossover_end, mutation_start, mutation_end;
    	gettimeofday(&start, NULL);
    
    	std::vector<double> v_set;
    	std::vector<double> v_fit;
    	std::vector<double> v_sor;
    	std::vector<double> v_sel;
    	std::vector<double> v_cros;
    	std::vector<double> v_mut;
    
    	// coordinate delle città
    	// int x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    	// int y[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    
    	// città
    	//city city_set[NUM_CITIES];
    	int city_set_x[NUM_CITIES];
    	int city_set_y[NUM_CITIES];
    	int city_set_id[NUM_CITIES];
    
    	// popolazione composta da path (possibii soluzioni al problema)
    	int *city_x = (int *)malloc(tot_elem * sizeof(int));
    	// memset(city_x, -1, tot_elem * sizeof(int));
    	int *city_y = (int *)malloc(tot_elem * sizeof(int));
    	// memset(city_y, -1, tot_elem * sizeof(int));
    	int *city_id = (int *)malloc(tot_elem * sizeof(int));
    	// memset(city_id, -1, tot_elem * sizeof(int));
    	fit *fitness_element = (fit *)malloc(size_pop * sizeof(fit));
    
    	// mating_pool, i migliori elementi della popolazione
    	int *mating_x = (int *)malloc(NUM_CITIES * SIZE_MATING * sizeof(int));
    	int *mating_y = (int *)malloc(NUM_CITIES * SIZE_MATING * sizeof(int));
    	int *mating_id = (int *)malloc(NUM_CITIES * SIZE_MATING * sizeof(int));
    
    	srand(time(NULL));
    
    	// std::cin.get() != '\n';
    	std::cout << "read from file\n";
    
    	// leggo le coordinate delle città
    	const char *filename = "/home/davide/Documenti/GA/BURMA14.txt";
    
    	char *line;
        size_t n = 5;
    
        FILE *coordFile = fopen(filename, "r");
        //FILE *f = fopen("/home/davide/Documenti/GA/result.txt", "w");
    
        int i; // indice dell'array
        int x, y; // coordinate delle città
    
        while(getline(&line, &n, coordFile) != -1 && i <= NUM_CITIES)
        {
            int items = sscanf(line, "%d %d %d", &i, &x, &y);
            if(items != 3)
                exit(EXIT_FAILURE);
            --i;
            //std::cout << x << "\n";
            //std::cout << y << "\n";
            //std::cout << i << "\n";
    
            city_set_x[i] = x;
            city_set_y[i] = y;
            city_set_id[i] = i;
        }
        fclose(coordFile);
    
        // std::cin.get() != '\n';
    
    	
        // stampa
    	std::cout << "[CITTA.X]\n";
    	for(int i = 0; i < NUM_CITIES; ++i) {
    
    		// city_set_x[i] = x[i];
    		// city_set[i].x = i + 1;
    		std::cout << city_set_x[i] << " ";
    	}
    	std::cout << "\n";
    
    	std::cout << "[CITTA.Y]\n";
    	for(int i = 0; i < NUM_CITIES; ++i) {
    
    		// city_set_y[i] = y[i];
    		// city_set[i].y = i + 1;
    		std::cout << city_set_y[i] << " ";
    	}
    	std::cout << "\n";
    
    	std::cout << "[CITTA.ID]\n";
    	for(int i = 0; i < NUM_CITIES; ++i) {
    
    		// city_set_id[i] = i;
    		std::cout << city_set_id[i] << " ";
    	}
    	std::cout << "\n";
    }

The file from I read is this.

    1 16 96
    2 16 94
    3 20 92
    4 22 93
    5 25 97
    6 22 96
    7 20 97
    8 17 96
    9 16 97
    10 14 98
    11 16 97
    12 21 95
    13 19 97
    14 20 94