Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1377
  • Last Modified:

Unhandled exception at 0x7c92a958 in...Access violation writing location 0x00030fb0.

Code runs fine for awhile and then breaks in first for loop between Counter2 = 150 and Counter2 = 450 then throws the error:

Unhandled exception at 0x009810ab in Sim HW5.exe: 0xC0000005: Access violation writing location 0x00000000.

Any ideas why?

// Sim HW4.cpp : Defines the entry point for the console application.
//
 
 
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <cmath>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
	int Counter = 0;
	int Counter2 = 0;
	int Counter3 = 0;
 
	const int n = 100000;
	
	int fj[20] = {0};
	memset(fj,0,20 * sizeof(int));
	
	double Divisor = 1.0;
	double Z0 = 1;
	double Zi = 0.0;
	double ZiMinusOne = 0.0;
	double Ui = 0.0;
	double TwoPowerThirtyOne;
	TwoPowerThirtyOne = pow((double)2,31);
	double v[100000];
	memset(v,0,100000 * sizeof(double)); 
 
	while (Counter < n+1){
		if (Counter == 0)
			ZiMinusOne = Z0;
		else
			ZiMinusOne = Zi;
 
		Divisor = (floor( 16807*ZiMinusOne/(TwoPowerThirtyOne-1)));
		Zi = 16807*ZiMinusOne - (Divisor) * (TwoPowerThirtyOne-1);
 
		Ui = Zi/(TwoPowerThirtyOne-1);
 
		v[Counter] = Zi;
 
		Counter++;
		}
 
	for (Counter2 = 0; Counter2 < n-1; Counter2++){
		cout << Counter2 << endl;
		for (Counter3 = 0; Counter3 < 20; Counter3++){
			if (v[Counter2] >= Counter3*TwoPowerThirtyOne/20 && v[Counter2] <= (Counter3+1)*TwoPowerThirtyOne/20)
				fj[Counter2]++;
		}
	}
/*
	int i, j;
	int k = 20;
	double ChiSq = 0;
	for (Counter2 = 0; Counter2 < k; Counter2++){
		cout << "fj" << Counter2 << ": " << fj[Counter2] << endl;
		ChiSq += k/n*(pow((double)(fj[Counter2]-n/k),2));
	}
*/
	system ("PAUSE");

Open in new window

0
ltdanp22
Asked:
ltdanp22
1 Solution
 
RishadanPortCommented:
Could you give us a rough idea of what exactly your code is doing?
0
 
waysideCommented:
      const int n = 100000;
       
        int fj[20] = {0};
...

        for (Counter2 = 0; Counter2 < n-1; Counter2++){
                for (Counter3 = 0; Counter3 < 20; Counter3++){
                        if (v[Counter2] >= Counter3*TwoPowerThirtyOne/20 && v[Counter2] <= (Counter3+1)*TwoPowerThirtyOne/20)
                                fj[Counter2]++;                 // <-!!!!!!!!!!!!!!
                }
        }


fj has only 20 elements, Counter2 goes up to 99999 (n-1).

So you are inserting elements far beyond the end of the fj[] array by using fj[Counter2]. At some point this causes sufficient stack corruption to crash the program.

0
 
ltdanp22Author Commented:
THANK YOU! Wayside I could kiss you. Too bad for you I'm not more attractive. Have a great day. :)
Dan
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now