The following program crashes. Can someone please tell me what's wrong in this code snippet?

Code:
int i, n = 0, num;
    string data;

    string *cargo_name_array;
    int *cargo_duration_array;
    int *cargo_size_array;

ifstream cargo_in("cargo_input.txt"); //opens input file

        //gets number of lines
        if (cargo_in.is_open()) {
            while (cargo_in.good()) {
                getline(cargo_in,data);
                n++; //line counter up
            };
        }

        else { //file access verification
            cout << "Input file access error.";
            return 0;
        };

        cargo_in.clear();

        //declares dynamic arrays for cargo parameters
        cargo_name_array = new string[n];
        cargo_duration_array = new int[n];
        cargo_size_array = new int[n];

        for (i=1; i<=n; i++) {
            getline(cargo_in, data, '\t'); //gets string until tab
            cargo_name_array[i] = data; //stores string in array

            while (cargo_in.get() == '\t'); //discards consecutive tabs
            cargo_in.unget(); //moves back one character

            getline(cargo_in, data, '\t'); //gets size string until tab
            //converts string to decimal and stores size value
            cargo_size_array[i] = (int) strtod(data.c_str(), NULL);

            getline(cargo_in, data); //gets duration string
            //converts string to decimal and stores duration value
            cargo_duration_array[i] = (int) strtod(data.c_str(), NULL);
        }
            cargo_in.close(); //closes input file