Unhandled exception at 0x00FB59E6

-1

I've been looking over my code for awhile now, and I can't figure out why this error keeps coming up. It's probably something really simple, but I just can't figure it out...

"Unhandled exception at 0x00FB59E6 in program.exe: 0xC0000005: Access violation writing location 0x00000009."

It happens on the third time of repeating the program

main.cpp

#include <iostream>
#include <string>
#include "functions.h"

using namespace std;

int main(){
    RandomArray();
    MinMaxArray();
    SortedArrays();

    cout << "\n\nWould you like to re-run? (Y/N): ";
    cin >> y;

    if (y == "Y" || y == "y"){
        system("CLS");
        main();
    }else{
        system("PAUSE");
    }

  return 0;
}

functions.h

#include <iostream>
#include <time.h>

using namespace std;

int array[50], used[50], sortedArray[50];
int buildSort = 1, genNum, mx = 0, mn = 100;
bool x;
string y;

int RandomArray(){
    srand(time(0));
    for(int a = 0; a < 50; a++){ //array generator
        do{
            genNum = (1+rand()%100); //generate a # between 1-100
            x = false;
    for(int b = 0; b < 50; b++){
        if(genNum == used[b]){ //if the number is already used...
            x = true; 
       }
    }

    }while(x == true);
        used[a] = genNum;
        array[a] = genNum;
    }

    cout << "Random array: " << endl;

    for(int c = 0; c < 50; c++){
        cout << array[c] << " "; //display the random array
    }
    cout << endl << endl;
    return 0;
}

int MinMaxArray(){
    for(int d = 0; d < 50; d++){ //for each number in the array
        if(array[d] > mx){ //check to see if each number is greater than mx
            mx = array[d]; //the max equals that number it picked out
        }
        if(array[d] < mn){ //check to see if theres a number is less than mn
            mn = array[d]; //the minimum equals that number it picked out
        }
    }

    cout << "Maximum: " << mx << endl; //display the max
    cout << "Minimum: " << mn << endl << endl; //display the min
    return 0;
}

int SortedArrays(){
    sortedArray[0] = mn;
    for(int e = mn + 1; e <= mx; e++){ //goes through 1-100 and adds each number to another array in order
        for(int f = 0; f < 50; f++){
            if(array[f] == e){
                sortedArray[buildSort] = array[f];
                buildSort++;
            }
        }
    }

    cout << "Sorted array: " << endl;
    for(int g = 0; g < 50; g++){
        cout << sortedArray[g] << " "; //display sorted from lowest to highest
    }

    cout << endl << endl;
    cout << "Reverse sorted: " << endl;

    for(int h = 49; h >= 0; h--){
        cout << sortedArray[h] << " "; //display sorted from highest to lowest
    }
    return 0;
}
c++
arrays
asked on Stack Overflow Oct 31, 2014 by C-Code

2 Answers

1

You are using some variables that you are initializing just the 1st time: buildSort, mx and mn; Add at the beginning of your main something like

int main()
{
    buildSort = 1;
    mx = 0;
    mn = 100;

    RandomArray();
    MinMaxArray();
    SortedArrays();
}

And try again. Your buildSort makes you run out of the array.

Just a suggestion: try to write your code better! Is almost unreadable!!!

answered on Stack Overflow Oct 31, 2014 by IFeelGood
0
  • Don't use global variable (at least not like this!)
  • There is not need to use system function for basic features like CLS and PAUSE, you may use clrscr() or getch() (or appropriate functions)
  • Don't recurse main - it it not meant for this purpose. Though no compiler will complain, it is bad approach.
answered on Stack Overflow Oct 31, 2014 by Ajay

User contributions licensed under CC BY-SA 3.0