线程1:EXC_BAD_ACCESS(代码=1地址=0x0)

2024-01-28

我正在尝试创建一个简单的洗牌和发牌模拟器。我使用一个向量来表示一副 52 张牌,每张牌都由结构表示BitCard其元素的空间是内存,受到位域的限制。但是当构造函数尝试访问向量时,xCode 会抛出一个BAD_ACCESS exception: Thread 1: EXC_BAD_ACCESS (code =1 address = 0x0)。我做了一些研究,发现这个异常与空指针链接,但似乎不知道如何修复它。我的代码如下:

#include <iostream>
#include <cctype>
#include <cstdlib>
#include <vector>
#include <iomanip>
using namespace std;
struct BitCard{
    unsigned face:4;
    unsigned color:1;
    unsigned suit:2;
};
class DeckOfCards {
public:
    static const int faces = 13;
    static const int colors = 2;
    static const int numberOfCards = 52;
    DeckOfCards();
    void shuffle();
    void deal();
private:
    vector <BitCard> deck={};
};
DeckOfCards::DeckOfCards(){
    for (int i = 0; i <numberOfCards;++i){
        deck[i].face = i%faces;
        deck[i].suit = i/faces;
        deck[i].color = i/(faces*colors);
    }
}
void DeckOfCards:: shuffle(){
    for (int i = 0; i <numberOfCards;i++){
        int j = rand()%numberOfCards;
        BitCard tmp = deck[i];
        deck[i] = deck[j];
        deck[j] = tmp;
    }
}
void DeckOfCards:: deal(){
    for (int k1 = 0, k2 = k1+numberOfCards/2;k1<numberOfCards/2-1;k1++,k2++)
    {
        cout << "Color:" << setw(3) << deck[k1].color
        << " Card:" << setw(3) << deck[k1].face
        << " Suit:" << setw(3) << deck[k1].suit
        << " Color:" << setw(3) << deck[k2].color
        << " Card:" << setw(3) << deck[k2].face
        << " Card:" << setw(3) << deck[k2].suit;
    }
}



int main(int argc, const char * argv[]) {
    DeckOfCards testDeck;
    testDeck.shuffle();
    testDeck.deal();

    return 0;
}

异常是在行中生成的

deck[i].face = i%faces;

我怎样才能解决这个问题? 提前致谢!


您正在尝试访问向量的元素deck在构造函数中。但是当你调用构造函数时deck向量为空

vector <BitCard> deck={}; // <- empty deck 

DeckOfCards::DeckOfCards(){
    for (int i = 0; i <numberOfCards;++i){
        deck[i].face = i%faces; // <- At construction time, you are trying to access deck with index i. but Deck is empty!
        //...
    }
}

一种解决方案是构造您的对象BitCard并将其推至vector

DeckOfCards::DeckOfCards(){
    for (int i = 0; i <numberOfCards;++i){
        BitCard myBitCard;
        myBitCard.face = i%faces;
        myBitCard.suit = i/faces;
        myBitCard.color = i/(faces*colors);
        deck.push_back(myBitCard);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程1:EXC_BAD_ACCESS(代码=1地址=0x0) 的相关文章

随机推荐

  • Gem 安装错误可写和 PATH

    这是我遇到的两个错误 我使用的是 OS X 老实说 不知道我是否通过 gem 安装 如果这很重要的话 WARNING Installing to gem since Library Ruby Gems 1 8 and usr bin are
  • 将列表拆分为单独但重叠的块

    假设我有一个清单A A 1 2 3 4 5 6 7 8 9 10 我想创建一个新列表 比如说B 按以下顺序使用上面的列表 B 1 2 3 3 4 5 5 6 7 7 8 9 9 10 即前 3 个数字为A 0 1 2 后 3 个数字为A 2
  • GAE 云数据存储:获取最常编写的模型

    我正在尝试按最常编写的模型的降序排列模型列表 这是我到目前为止所尝试过的 client查询集提供模型及其属性 属性的详细信息 以及这些模型相关的详细信息 实体计数 内置索引计数 内置索引大小 数据大小 复合索引大小 复合索引计数 总大小 但
  • 为什么结构体的 sizeof 不安全

    The MSDN http msdn microsoft com en us library eahchzkf 28v vs 80 29 aspx明确指出 对于所有其他类型 包括结构体 sizeof 运算符只能 在不安全的代码块中使用 Th
  • 在 URLSearchParams 中使用 json 对象

    是否可以以某种方式将 json 对象附加到 URLSearchParams 对象上 所以而不是 urlSearchParams append search person it s urlSearchParams append search
  • 没有为 MySQLi 准备好的语句中的参数提供数据

    我一直在重新设计我的网站 从不受保护的 MySQL 查询到 mysqli 准备好的语句 一切都很顺利 直到我得到这个 没有为准备好的语句中的参数提供数据 if empty err pSETQuery NULL if empty POST p
  • 命名空间中的枚举

    做这样的事情有没有意义 namespace status enum status ok error 并像这样使用它status ok 或者我应该这样做 enum status status ok status error 并像这样使用它st
  • 添加到 ArrayList Java

    我是java初学者 需要一些帮助 我正在尝试将抽象数据类型 Foo 它是一个关联列表 转换为字符串 B 的 Arraylist 如何循环遍历该列表并将每个字符串添加到数组中 我可能想多了 但我现在迷失了 我在这里先向您的帮助表示感谢 实例化
  • deepcopy() 非常慢

    我在 Python 中有一个包含大约 1000 个对象 行星系统 恒星 行星 的游戏状态 我需要复制它并在需要时对其应用一堆转换 然而 在大约 1 个请求 秒的情况下 这是占用了我24 63 的运行时间 https i stack imgu
  • 如何列出属于某个VPC的所有资源?

    在我的 AWS 账户中 我的 VPC 很少 我正在尝试找到一种方法来列出位于某个 VPC 下的所有资源 谢谢 您可以通过三种方式完成此操作 AWS CLI AWS 控制台或代码 AWS CLI 您可以使用 AWS CLI 列出与 VPC 关
  • Slim 基本身份验证

    今天是个好日子 我这里有一个有效的精简代码slim basic auth https packagist org packages tuupola slim basic auth当我进入受限目录时 会显示以下内容 一切正常 但我想做的是将其
  • 使用 SqlDataReader 和字符串数组

    我想使用数据读取器读取记录并将结果发送到数组字符串 我使用存储过程从 2 个表中选择数据 string ReqID string ConnectionString ConfigurationManager ConnectionStrings
  • Extjs如何让滚动条出现?

    我需要在表单比包含容器更宽时立即显示滚动条 我在容器上设置了属性 autoScroll true 但它不起作用 有办法得到我需要的结果吗 这是工作示例 http jsfiddle net mQC3B 2 http jsfiddle net
  • 提高 SQL Server 中的 Xquery 性能

    我有一个 Azure SQL 数据库 其中有 1 个表和大量记录 超过 75 000 条 该表包含 XML 数据类型的列 此列如下所示
  • 如何使用maven使用PrimeFaces-5.2.X的jar?

    这个问题看起来很简单 但是根据我的研究 maven 存储库http repo maven apache org maven2 org primefaces primefaces http repo maven apache org mave
  • 为什么测试“NaN == NaN”对于从 pandas 数据帧中删除不起作用?

    请解释如何在 pandas 中处理 NaN 因为以下逻辑对我来说似乎 损坏 我尝试了各种方法 如下所示 来删除空值 我的数据框 我使用它从 CSV 文件加载read csv 有一个列comments 大部分时间都是空的 专栏marked r
  • Elasticsearch 的最大滚动时间

    滚动搜索可以设置的最大滚动时间是多少 文档 https www elastic co guide en elasticsearch client javascript api current api reference html api s
  • Qt 同时使用多种字体

    我想在我的软件中使用三种字体 FontA 包含拉丁文 希腊文 西里尔文字符 FontB 包含韩文字符 FontC 包含日文 汉字 这些字体没有重叠 我想设置我的应用程序 以便立即使用所有这些字体 因为来自不同语言的字符可能会出现在我的软件中
  • 解析数字 ifconfig 标志

    ifconfig 命令输出其以文本和数字格式 虽然我可以找到参考对于数字标志 我找不到任何有关如何解释 屏蔽 数字的指示 qfe2 flags 1100843
  • 线程1:EXC_BAD_ACCESS(代码=1地址=0x0)

    我正在尝试创建一个简单的洗牌和发牌模拟器 我使用一个向量来表示一副 52 张牌 每张牌都由结构表示BitCard其元素的空间是内存 受到位域的限制 但是当构造函数尝试访问向量时 xCode 会抛出一个BAD ACCESS exception