首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在C++中静态转换2D vector size() (size_t to int)?

如何在C++中静态转换2D vector size() (size_t to int)?
EN

Stack Overflow用户
提问于 2018-01-06 19:33:28
回答 1查看 417关注 0票数 0

我没有找到任何其他的帖子来回答这个问题。这是一个c++程序。我在以下行收到一个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int entryval = static_cast<int>(database[0].size());

该错误显示:Thread1: EXC_BAD_ACCESS (code = 1,address = 0x8)它将我的注意力引向向量文件中的size()文件,指向以下行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{return static_cast<size_type>(this->__end_ - this->__begin_);}

我的类型转换格式不正确吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Species ID,Kingdom,Phylum,Class,Order,Family,Genus,Species,Authority,Infraspecific rank,Infraspecific name,Infraspecific authority,Stock/subpopulation,Synonyms,Common names (Eng),Common names (Fre),Common names (Spa),Red List status,Red List criteria,Red List criteria version,Year assessed,Population trend,Petitioned
//2055,ANIMALIA,CHORDATA,MAMMALIA,CARNIVORA,OTARIIDAE,Arctocephalus,australis,"(Zimmermann, 1783)",,,,,Arctophoca australis,South American Fur Seal,Otarie  fourrure Australe,Oso Marino Austral,LC,,3.1,2016,increasing,N
//41664,ANIMALIA,CHORDATA,MAMMALIA,CARNIVORA,OTARIIDAE,Arctocephalus,forsteri,"(Lesson, 1828)",,,,,Arctocephalus australis subspecies forsteri|Arctophoca australis subspecies forsteri,"New Zealand Fur Seal, Antipodean Fur Seal, Australasian Fur Seal, Black Fur Seal, Long-nosed Fur Seal, South Australian Fur Seal",,,LC,,3.1,2015,increasing,N

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>

int main()
{

std::string entry;
std::vector<std::vector<std::string> > database;
std::ifstream file("C:/Users/mewtwo/Desktop/Programs/Seals.csv");

if (file) {
    while (std::getline(file, entry)) {
        size_t dbsize = database.size();
        database.resize(dbsize + 1);
        std::istringstream ss(entry);
        std::string field, push_field("");
        bool no_quotes = true;

        while (std::getline(ss, field, ',')) {
            if (static_cast<size_t>(std::count(field.begin(), field.end(), '"')) % 2 != 0) {
                no_quotes = !no_quotes;
                field.erase(remove(field.begin(), field.end(), '\"'), field.end());
            }

            push_field += field + (no_quotes ? "" : ",");

            if (no_quotes) {
                database[dbsize].push_back(push_field);
                push_field.resize(0);
            }
        }
    }
}

int dbval =  static_cast<int>(database.size());
int entryval = static_cast<int>(database[0].size());
int animalChoice;
int dataChoice;
int switchChoice;
bool moreData;
bool moreAnimal = true;
while (moreAnimal == true) {

    std::cout << "*********************ENDANGERED ANIMALS*********************" << std::endl;
    std::cout << "Choose an animal! (1-" << dbval - 1 << ")" << std::endl;
    for (int x = 1; x < database.size(); x++) {
        if (database[x][14] != ""){
            std::cout << x << ". " << database[x][14] << std::endl;
        }
        else {
            std::cout << x << ". " << database[x][6] << " " << database[x][7] << std::endl;
        }

    }
    std::cout << "\nAnimal choice:";
    while (!(std::cin >> animalChoice) || animalChoice <= 0 || animalChoice >= dbval ){
        std::cout << "\nYou pressed an incorrect key. Try again1." << std::endl;
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "\nAnimal choice:";
    }
    moreData = true;
    while (moreData == true) {
        std::cout << "\nWhat data do you want to access about the ";
        if(database[animalChoice][14] != ""){
            std::cout << database[animalChoice][14] << std::endl;
        }
        else{
            std::cout << database[animalChoice][6] << " " << database[animalChoice][7] << std::endl;
        }
        std::cout << "?" << std::endl;
        for (int x = 0; x < entryval; x++) {
            std::cout << x + 1 << "." << database[0][x] << std::endl;
        }
        std::cout << "\nData choice:";
        while (!(std::cin >> dataChoice) || dataChoice <= 0 || dataChoice >= entryval ){
            std::cout << "You pressed an incorrect key. Try again2." << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cout << "\nData choice:";
        }
        std::cout << database[animalChoice][14] << std::endl;
        std::cout << database[0][dataChoice - 1] << ": " << database[animalChoice][dataChoice - 1] << std::endl;
        std::cout << "\nWould you like to access more data about the " << database[animalChoice][14];
        if(database[animalChoice][14] != ""){
            std::cout << database[animalChoice][14] << std::endl;
        }
        else{
            std::cout << database[animalChoice][6] << " " << database[animalChoice][7] << std::endl;
        }
        std::cout << "?" << std::endl;
        std::cout << "1. Yes" << std::endl;
        std::cout << "2. Access data of a different animal" << std::endl;
        std::cout << "3. Quit" << std::endl;
        std::cout << "\nChoice:";
        while (!(std::cin >> switchChoice) || switchChoice <= 0 || switchChoice >= 4 ){
            std::cout << "You pressed an incorrect key. Try again3." << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cout << "\nChoice:";
        }
        if (switchChoice == 1) {
            moreData = true;
        }
        else if (switchChoice == 2) {
            moreData = false;
            break;
        }
        else if (switchChoice == 3) {
            exit(1);
        }
        else {
            std::cout << "\nPROGRAM FAILURE" << std::endl;
            exit(1);
        }
    }
}
return 0;
}

另外,我的代码还有其他明显的问题吗?该代码采用IUCN的整个物种数据库,并使用菜单显示数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-09 11:32:39

address = 0x8中的低值提示代码试图通过空指针访问成员,该指针来自database[0]返回的无效“空”引用。

只有当访问越界时,operator[]才会返回这样一个损坏的引用,从而触发未定义的行为。在这种情况下,看起来您的std::vector实现只是盲目地通过其数据指针进行索引,当向量为空时,数据指针为null。

结论:没有任何东西被插入到你的向量中。这可能是由读取文件时的错误引起的。您应该将错误检查添加到代码中,并干净地报告它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48131107

复制
相关文章
【头条】如何隐藏页面中的某个元素
透明度为0,仍在文档流中,当作用于其上的事件(如点击)无效,这也是 visibility:hidden 与 opacity: 0 的区别
山月
2021/04/07
3.2K0
【头条】如何隐藏页面中的某个元素
元素的显示与隐藏
在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是 display visibility 和 overflow。
星辰_大海
2020/09/30
4.4K0
用 CSS 隐藏页面元素
用 CSS 隐藏页面元素有许多种方法。你可以将 opacity 设为 0、将 visibility 设为 hidden、将 display 设为 none 或者将 position 设为 absolute 然后将位置设到不可见区域。
全栈程序员站长
2022/08/09
1.6K0
​隐藏404页面中nginx版本信息
兮动人
2023/09/03
8000
demo2动态加载显示商品详情页
/* 要求:实现 头像+昵称(多余7位用...)           商品图片(根据商品实际的图片的大小进行动态的展示。按照一定的比例进行展示。)           产品简介。产品简介在商品图片的下边。并跟随商品图片的大小进行动态的收缩或者是展示。 考虑:实现功能之后,是否要做占位图 进行图片的占位??! */ 难点:动态的加载。 实现:首先创建ui 然后请求数据 最后在主线程进行赋值 并且刷新ui 即可实现。 // // ACShowDetailVC.m // demo2详情动态加载展开
用户1219438
2018/02/01
7170
demo2动态加载显示商品详情页
JQuery 隐藏和显示html元素
$(function(){ $("#bubmitBtn").click(function(){ //首先需要把提示标签全部隐藏掉 $("#nameInvalid").hide(); $("#emailInvalid").hide(); $("#pwdInvalid1").hide(); $("#pwdInvalid2").hide(); //检查用户名: 长度为6到12位, 只能输入数字和英文和下划线 //alert("--"); var $nameEle = $("#UcenterMember_account"); var reg = /^\w{6,12}$/; if(!reg.test($nameEle.val())) { $("#nameInvalid").text(" *用户名长度为6到12位, 只能输入数字和英文和下划线"); $("#nameInvalid").show(); //alert("用户名长度为6到12位, 只能输入数字和英文和下划线"); $nameEle[0].focus(); return false; } //邮箱格式必须正确, 可以不输入 var $emailEle = $("#UcenterMember_email"); reg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if($emailEle.val()!="" && !reg.test($emailEle.val())) { $emailEle[0].focus(); $("#emailInvalid").text(" *邮箱格式不正确!"); $("#emailInvalid").show(); //alert("邮箱格式不正确!"); return false; } //检查密码: 长度为6位, 只能输入数字和英文 var $passwordEle = $("#UcenterMember_password1"); reg = /^[a-zA-Z0-9]{6,15}$/; if(!reg.test($passwordEle.val())) { $("#pwdInvalid1").text(" *密码的最低长度为6位, 只能输入数字和英文"); $("#pwdInvalid1").show(); //alert("密码的长度为6位, 只能输入数字和英文"); $passwordEle[0].focus(); return false; } //确认密码必须与密码相同 var $password2Ele= $("#UcenterMember_password2"); if($password2Ele.val()!=$passwordEle.val()) { $password2Ele[0].focus(); $("#pwdInvalid2").text(" *确认密码必须与密码相同"); $("#pwdInvalid2").show(); //alert("确认密码必须与密码相同"); } return true; }); });
wust小吴
2019/07/05
9.3K0
CSS篇(005)-在页面上隐藏元素的方法有哪些?
-(1)使用 display:none;隐藏元素,渲染树不会包含该渲染对象,因此该元素不会在页面中占据位置,也不会响应绑定的监听事件。
齐丶先丶森
2022/05/12
6220
【黄啊码】微信小程序页面加载闪烁问题|wx:if=““导致先显示后隐藏的闪烁问题
先用一个变量让其隐藏,当从接口中获得数据的时候,在把这个 show 设置成 true 。这样出来的效果就是,内容逐渐在显示,依次显示。从而看不到闪烁再隐藏。 代码如下:
黄啊码
2022/01/09
1.4K0
【CSS】元素显示与隐藏 ( display 隐藏对象 | visibility 隐藏对象 | overflow 隐藏对象 )
设置 display: block 可以显示元素 , 同时该样式还可以将元素转为块元素 ;
韩曙亮
2023/04/16
5.5K0
【CSS】元素显示与隐藏 ( display 隐藏对象 | visibility 隐藏对象 | overflow 隐藏对象 )
iframe页面点击页面其它地方隐藏某元素
<a href="javascript:;" id="showOrHide"></a> <!-- 注意此处的$()不是jquery 是document.getElementById()封装为方法 --> <div id="show-or-hide"> <a href="javascript:$('show-or-hide').style.display='none';parent.location.href='/auth/login'">切换账号</a> <a style="font-size: 12
李磊
2019/08/10
2K0
Rn页面滚动显示隐藏head动画
明知山
2023/10/03
2360
Rn页面滚动显示隐藏head动画
分享 8 种在 CSS 中隐藏元素的方法
作为 Web 开发人员,我们经常遇到需要隐藏网页上的元素的情况。在本文中,我们将分享8 种在 CSS 中隐藏元素的方法,每种方法都有优点和注意事项。
前端达人
2023/08/31
3160
分享 8 种在 CSS 中隐藏元素的方法
WordPress底部显示页面加载时间
效果预览 方法 1.将以下代码加入到主题的functions.php中 //页面加载时间自动检测 function wp_page_speed() { date_default_tim
回忆大大
2021/08/09
1.7K0
WordPress底部显示页面加载时间
WordPress底部显示页面加载时间
本文最后更新于2021年1月22日,已超过1年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
回忆大大
2023/03/08
1.5K0
WordPress底部显示页面加载时间
元素隐藏与显示属性及操作方式
浏览器对其渲染可是不可见,它在网页中占位置却不可点击,也就是说明元素不可见却仍然占据空间。
岳泽以
2022/10/26
1.6K0
元素隐藏与显示属性及操作方式
用 CSS 隐藏页面元素的 5 种方法
用 CSS 隐藏页面元素有许多种方法。你可以将 opacity 设为 0、将 visibility 设为 hidden、将 display 设为 none 或者将 position 设为 absolute 然后将位置设到不可见区域。
疯狂的技术宅
2019/03/28
2K0
点击加载更多

相似问题

初始页面加载后在页面上显示动态项

11

隐藏元素显示后未正确加载

12

在页面加载时隐藏或显示动态目标html元素的最佳方法?

30

在页面加载之前显示加载器元素,然后将其隐藏

13

在页面加载后立即再次加载页

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文