C 访问违规读取位置0xcccccccccccccccccccc和卡对象

C++ Access violation reading location 0xCCCCCCCC on Deck and Card Objects

本文关键字:0xcccccccccccccccccccc 对象 位置 读取 访问      更新时间:2023-10-16

错误似乎与指针有关,但我无法完全指出正在发生的事情。我将稍后将卡数组分成类型和西装,但是现在我想弄清楚错误的情况,我尝试制作交换指针的参数,没有真正的成功。我非常感谢任何帮助。

//in functions.cpp
#include "Header.h"
void randomizer()
{
    srand(time(NULL));
}
void swap(string a, string b)
{
    string temp = a;
    a = b;
    b = temp;
}
string Card::generateRandomCard()
{
    randomizer();
    int random = rand() % 52;
    cout << "Your draw is: " << card[random] << endl;
    return card[random];
}
void Deck::randomize(string arr[], int size)
{
    randomizer();
    for (int i = size - 1; i > 0; i--)
    {
        int j = rand() % (i + 1);
        swap(arr[i], arr[j]);
    }
}
void Deck::printDeck()
{
    randomizer();
    Card card1;
    cards[52] = card1.card[52];
    randomize(cards, 52);
    for (int i = 0; i < 52; i++)
    {
        cout << cards[i] << endl;
    }
    cout << "nYour hand: " << cards[51] << endl << cards[50] << endl << cards[49] << endl << cards[48] << endl << cards[47] << endl;
    cout << "The next card in the deck is: " << cards[48] << endl;
}
//in Header.h
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
void randomizer();
void swap(string a, string b);
class Card
{
public:
    string generateRandomCard();
    const string card[52] = { "2 of Clubs", "3 of Clubs", "4 of Clubs", "5 of Clubs", "6 of Clubs", "7 of Clubs", "8 of Clubs", "9 of Clubs", "10 of Clubs", "J of Clubs", "Q of Clubs", "K of Clubs", "A of Clubs",
        "2 of Spades", "3 of Spades", "4 of Spades", "5 of Spades", "6 of Spades", "7 of Spades", "8 of Spades", "9 of Spades", "10 of Spades", "J of Spades", "Q of Spades", "K of Spades", "A of Spades",
        "2 of Hearts", "3 of Hearts", "4 of Hearts", "5 of Hearts", "6 of Hearts", "7 of Hearts", "8 of Hearts", "9 of Hearts", "10 of Hearts", "J of Hearts", "Q of Hearts", "K of Hearts", "A of Hearts",
        "2 of Diamonds", "3 of Diamonds", "4 of Diamonds", "5 of Diamonds", "6 of Diamonds", "7 of Diamonds", "8 of Diamonds", "9 of Diamonds", "10 of Diamonds", "J of Diamonds", "Q of Diamonds", "K of Diamonds", "A of Diamonds" };
private:
};
class Deck
{
public:
    void randomize(string arr[], int size);
    void printDeck();
private:
    string cards[52];
};
//in main.cpp
#include "Header.h"
void main()
{
    Card card1;
    Deck mainDeck;
    mainDeck.printDeck();
    card1.generateRandomCard();
}

0xCCCCCCCC是Microsoft Visual Studio中存储在非初始化的指针中的特殊值。您发布的代码包含一个不合时宜的访问:

cards[52] = card1.card[52];

数组的大小为52,但数组是按偏移索引的,因此偏移52将降落在不存在的第53个元素中。

您可以尝试调试代码,逐行划分,并发现何时丢弃错误。

相关文章:
  • 没有找到相关文章