vector_02_为什么会出现segment fault?

文章讲述了在C++程序中遇到SegmentationFault错误,通过GDB进行调试,发现是由于vector对象vec_u32未初始化导致的内存访问错误。
摘要由CSDN通过智能技术生成

书接上回,运行执行文件后,出现了segment fault错误,为什么?

gdb调试以下,看一下原因。

执行以下命令:

root@localhost:/home/root/testWorkSpace/CPP11/vector$ gdb ./build/move 

进入gdb命令窗口,显示源代码, 并再第8行设置一个断点:

(gdb) list
1       #include <iostream>
2       #include <utility>
3       #include <vector>
4       using namespace std;
5       typedef unsigned int uint32;
6       int main(void)
7       {
8           std::vector<uint32> vec_u32;
9           cout<<vec_u32[0]<<endl;
10          return 0;
(gdb) b 8

运行程序,并执行下一步指令,提示如下:

(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0x0000555555554a5f in main () at /home/lki8szh/testWorkSpace/CPP11/vector/main.cpp:9
9           cout<<vec_u32[0]<<endl;
1: vec_u32[0] = <error: Cannot access memory at address 0x0>
2: vec_u32 = std::vector of length 0, capacity 0
(gdb) bt full
#0  0x0000555555554a5f in main () at /home/lki8szh/testWorkSpace/CPP11/vector/main.cpp:9
        vec_u32 = std::vector of length 0, capacity 0

vec_u32 = std::vector of length 0, capacity 0, 该数组未初始化,不能访问,length:0, capcity: 0, 因此出现段错误。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值