其他分享
首页 > 其他分享> > c-指向矢量元素的指针崩溃

c-指向矢量元素的指针崩溃

作者:互联网

    vector<int> v;
    v.push_back(1);
    int * p = &v[0];
    for (int i = 2; i <= 100; ++i)
    {
        v.push_back(i);    
    }
    *p = 5;

我知道vector重新分配了一块新的内存以增加容量,但是p只是指向某个内存地址的指针,而p本身并没有改变.即使向量重新分配后,p指向的内存也位于同一进程的地址空间中.为什么会崩溃?

解决方法:

如果将代码更改为以下内容:

#include <stdio.h>
#include <vector>

int
main(int argc, char* argv[])
{
    std::vector<int> v;
    v.push_back(1);
    int * p = &v[0];

    printf( "Old: %08X\n", &v[0] );
    for (int i = 2; i <= 100; ++i)
    {
        v.push_back(i);    
    }
    printf( "New: %08X\n", &v[0] );

    getchar();

    return 0;
}

您将看到& v [0]的内存地址几乎总是与重新分配之前的地址不同.这意味着您创建的指针现在指向(潜在地)无效的内存.
现在,您只有一个指向某个内存块的指针p.无法保证该内存块中的内容,即使它是有效的也不行.

标签:c-3,c,linux,stl,segmentation-fault
来源: https://codeday.me/bug/20191011/1893223.html