You cannot have pointer references to local arrays in external functions, since once the local function exits it's stack may be reused and the data in the local variables will contain trash.
You can add word static to your local arrays declaration for it's memory to be persistent across other functions (and repeated calls). Although that is not a recommended solution at all here.
Change:
double statarr[6] = {(double)BA, (double)OB, (double)H, (double)BB, (double)K, (double)HBP};
To:
static double statarr[6] = {(double)BA, (double)OB, (double)H, (double)BB, (double)K, (double)HBP};
Although, a better solution would be to not declare the array local to calculateStats
Something like:
//calculate stats for each player, return as formatted string
double* calculateStats(string player, double *outArr){
//cut for conciseness, just know it works and the proper values are in the following array
//create stat array
outArr[0] = (double)BA;
outArr[1] = (double)OB;
outArr[2] = (double)H;
outArr[3] = (double)BB;
outArr[4] = (double)K;
outArr[5] = (double)HBP;
return outArr;
}
Then have:
int main(){
stringstream allstats;
allstats << readFile(); //readFile() simply returns a string read from a file
while(!allstats.eof()){ //check for end of stream
string temp;
getline(allstats, temp); //grab a line from allstats and put it into temp
double arr[6]
calculateStats(temp, arr) //create pointer to array of stats calculated for temp
// print arr
for(int x = 0; x < 6; x++)
cout << arr[x] << endl;
//****This spits out the correct value for arr[0] but for the rest of the array
//****it is values like 8.58079e-306 which tells me those addresses have been
//****overwritten.
}
return 0;
}