(This function is to calculate SMA). Exception thrown at 0x00509159 in FA.exe: 0xC0000005: Access violation reading location 0x0040400C

0

I'm trying to calculate a list of closing price for SMA. My program was supposed to be calculating like this. And the value of first day of 5-day SMA will be stored in array with index (time_frame-1).

Daily Closing Prices:
1.4660, 1.4627, 1.4600, 1.4607, 1.4609, 1.4691, 1.4687
First day of 5-day SMA:
(1.4660 + 1.4627 + 1.4600 + 1.4607 + 1.4609) / 5 = 1.4621
Second day of 5-day SMA:
(1.4627 + 1.4600 + 1.4607 + 1.4609 + 1.4691) / 5 = 1.4627
Third day of 5-day SMA:
(1.4600 + 1.4607 + 1.4609 + 1.4691 + 1.4687) / 5 = 1.4639

This is my typedef struct

typedef struct
{
    char date[11];
    double price;
    double SMA;
    double EMA;
}DATA;

This is the main function.

int main(void)
{
    DATA forex[100];
    int time_frame, count;
    get_data(&time_frame, &count, forex);
    calculate_SMA(time_frame, count, forex);

    return 0;
}

This function is to read from my text file "forexPrice.txt" and get user input for time_frame

void get_data(int *time_frame, int *count, DATA forex[])
{
    int i = 0;
    bool cont;

    ifstream infile("forexPrice.txt", ios::in);
    if (!infile)
        cout << "Error opening input file!";
    else
    {
        *count = 0;
        do
        {
            infile >> forex[i].date >> forex[i].price;
            cout << forex[i].date << "\t" << fixed << setprecision(4) << forex[i].price << endl;
            i++;
            (*count)++;
        } while (!infile.eof());
        infile.close();
    }

    do
    {
        cont = true;
        cout << "Enter the number of days to calculate SMA and EMA: ";
        cin >> *time_frame;
        if (*time_frame < 1 || *time_frame >= *count)
        {
            cout << "Do not enter number smaller than 1 or larger than " << *count << ". Please enter again.\n";
            cont = false;
            //break;
        }
    } while (cont == false);
}

This is the function to calculate SMA and error has shown at line price_total += forex[i].price; when i use debugger.

void calculate_SMA(int time_frame, int count, DATA forex[])
{
    double sma, price_total;
    for (int j = time_frame - 1; j < count; j++)
    {
        price_total = 0.0;

        for (int i = 0; i < i + time_frame; i++)
            price_total += forex[i].price;

        forex[j].SMA = price_total / time_frame;
        cout << forex[j].SMA << endl;
    }
}
c++
asked on Stack Overflow May 12, 2020 by Ying Shuang • edited May 12, 2020 by Ying Shuang

1 Answer

1

Think about this

for (int i = 0; i < i + time_frame; i++)

when is that loop ever going to ever stop?

I guess you meant this

for (int i = 0; i < time_frame; i++)
answered on Stack Overflow May 12, 2020 by john

User contributions licensed under CC BY-SA 3.0