Access violation reading location 0xCCCCCCCC

05/26/2015 15:46 Whaaat?#1
Hey
Ich hab ein Problem und zwar, bekomme ich immer eine Access violation an einem bestimmten Punkt in meinem Code weiß aber nicht warum. Das ganze war ne Aufgabe einer Challenge, nämlich das Pokerkarten verteilen.
Der Fehler hat mit meiner Variable val3 zu tun, was für mich wenig Sinn ergibt, da die anderen davor auch auf den gleichen Weg gut durchlaufen.
Außerdem wird val3 auch immer auf den Wert "3435973836" gesetzt, was die Größe einer "unsigned int" entspricht.
Code:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

int gen1()
{
	int v1 = rand() % 4 + 1;
	return v1;
}

int gen2()
{
	int v2 = rand() % 13 + 1;
	return v2;
}

int generate(int plrs)
{	
	int arr1[16];
	int arr2[16];
	int val1 = gen1();
	int val2 = gen2();
	int arr3[16];
	int arr4[16];
	int val3 = gen1();
	int val4 = gen2();

	string j = "Jack of ";
	string q = "Queen of ";
	string k = "King of ";
	string a = "Ace of ";
	string two = "2 of ";
	string three = "3 of ";
	string four = "4 of ";
	string five = "5 of ";
	string six = "6 of ";
	string seven = "7 of ";
	string eight = "8 of  ";
	string nine = "9 of";
	string ten = "10 of ";
	string dm = "Diamonds ";
	string sp = "Spades ";
	string cl = "Clubs ";
	string hr = "Hearts ";
	string number[13] = { a, two, three, four, five, six, seven, eight, nine, ten, j, q, k };
	string color[4] = { dm, sp, cl, hr };

	for (int z = 0; z < plrs; ++z)
	{
		for (int y = NULL; y < plrs * 2; ++y)
		{
			arr1[y] = val1;
			arr2[y] = val2;
			arr3[y] = val3;
			arr4[y] = val4;
			val1 = gen1();
			val2 = gen2();
			val3 = gen1();
			val4 = gen2();
		}
		for (int x = 0; x < 15; ++x)
		{
			if (arr1[x] == val1 && arr2[x] == val2)
			{
				val1 = gen1();
				val2 = gen2();
				x = 0;
			}

			if (arr3[x] == val3 && arr4[x] == val4)
			{
				val3 = gen1();
				val4 = gen2();
				x = 0;
			}
		}
		cout << number[val2] << color[val1] << endl << number[val4] << color[val3] << endl;

	}




	return(0);
}

int main()
{
	int plrcnt;
	cout << "How many players are playing?(2-8)\n";
	cin >> plrcnt;
	generate(plrcnt);

}
Fehlercode:
Code:
First-chance exception at 0x0F387EA6 (msvcp120d.dll) in whateverdafuq.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.
Unhandled exception at 0x0F387EA6 (msvcp120d.dll) in whateverdafuq.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.
PS: Ja der Code ist wahrscheinlich nicht der beste aber ich hab nach nem halben Jahr nach dem ich angefangen hab mal wieder weitergemacht.
05/26/2015 17:09 Terrat#2
Gott ist der Code unübersichtlich <3. Aber so wie es aussieht greift er auf ein Arrayitem zu welches nicht exestiert. Sprich z.B. die Arraygröße ist 3 und du willst den Wert von 4 haben, 4 exestiert ja nicht = acces violation. Guck dir mal sizeof an. Bei texten aber strlen!
05/26/2015 17:29 Whaaat?#3
Also wenn ich im Debugmodus den Wert von val3 am Zeitpunkt an dem es crasht anschaue, dann ist der Wert 4 und es geht trotzdem nicht:
[Only registered and activated users can see links. Click Here To Register...]
Edit:
Arrays mit der Größe [4] gehen von 0-3 stimmt. Ich muss nochmal kurz schauen.

Ja war leider mein Fail, da ich die Gen funktionen von 1-13 bzw. 1-4 gemacht habe obwohl die Arrays nur von 0-12 bzw. 0-3 gingen. Danke dir für die Hilfe :D
05/26/2015 17:42 newchild#4
Nur so nebenbei, es sieht so aus, als hättest du die random funktion nicht richtig geseedet, d.h. sie wird immer die gleiche Zahlenfolge ausspucken. Außerdem ist <random> der c++ Standardheader und und die STDlib der C Header.
([Only registered and activated users can see links. Click Here To Register...])