微凉的衣柜
2021-09-07 16:58
采纳率: 86.7%
浏览 24

c++ vector指针相关问题

情况1:声明一个vector空指针如下,会引发异常:

std::vector<int>* test_vector;
    for (int i = 0; i < 10; i++)
        test_vector->push_back(i);

异常提示为:

引发了异常: 读取访问权限冲突。
**std::_Vector_alloc<std::_Vec_base_types<int,std::allocator<int> > >::_Mylast**(...) 返回 0x4D9E00000015

情况2:修改指针,代码如下:

    std::vector<int>* test_vector;
    std::vector<int> test_vector1;
    test_vector = &test_vector1;

    for (int i = 0; i < 10; i++)
        test_vector->push_back(i);

则可以正常运行。

情况3:在堆上开辟vector指针,也可以正常运行:

    std::vector<int>* test_vector = new std::vector<int>;
    for (int i = 0; i < 10; i++)
        test_vector->push_back(i);
        delete test_vector;

为何情况1运行会报错?请各位指点。

  • 好问题 提建议
  • 收藏

4条回答 默认 最新

  • qfl_sdu 2021-09-07 17:12
    已采纳
    std::vector<int>* test_vector;这里test_vector只是声明了变量,但是没有申请内存空间,所以下面使用的时候回出错
    //2
    std::vector<int>* test_vector;
    std::vector<int> test_vector1;
    test_vector = &test_vector1;
    这样写的时候,test_vector系统自动分配了内存,所以test_vector = &test_vector1后,test_vector就有了实际内存空间,下面使用的时候就不会报错。但是需要注意的是,test_vector1的空间时临时分配的,出了作用域后系统会自动回收
    
    
    已采纳该答案
    评论
    解决 1 无用
    打赏 举报
  • 快乐鹦鹉 2021-09-07 16:59

    指针没有分配空间时,是不能进行指针内容操作的。
    举个例子,我在纸上写个住址,你就肯定这个住址上有套房子么。得现有房子,你才能住啊。
    第二、三种情况,正好是先有房子,或者是马上造一座房子,这时候你在按地址去找房子干任何事都行

    评论
    解决 1 无用
    打赏 举报
  • baidu_30233079 2021-09-07 16:59

    std::vector* test_vector这是一个指针,指向随机空间,当然会报错了。
    你没有理解指针是什么意思吧

    评论
    解决 1 无用
    打赏 举报
  • 微凉的衣柜 2021-09-08 15:06

    明白了,可以给一个更简单的关于指针的例子:

    double* m;
    *m = 5;//没有给m分配内存空间,因此会出错
    

    给m指针分别内存空间:

    double n = 4;
    double* m;
    m = &n;
    *m = 5;//此时m指针已经分配了内存空间,因此可以改变m指向的值
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题