c++ vector指针相关问题

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运行会报错?请各位指点。

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的空间时临时分配的,出了作用域后系统会自动回收

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

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

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

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

给m指针分别内存空间:

double n = 4;
double* m;
m = &n;
*m = 5;//此时m指针已经分配了内存空间,因此可以改变m指向的值