数据指针指向vector内元素,vector扩容后产生的错误。

    技术2025-11-09  8

    vector<int> vecInt;

    int a =1;

    vecInt.push_back(a);

     

    int* pA = &vecInt[0];

     

    cout << pA << ":" << *pA << endl;

     

    for (int i = 0; i < 16; i++)

    {

    vecInt.push_back(i);

    }

     

    cout << pA << ":" << *pA << endl;

     

    看上面一段代码,输出结果为:

    0025DC8:1

    0025DC8:-17891602

     

    当vector扩充容量以后,vector申请新的空间,所有原来的数据复制到新的空间上,旧的空间删除。所以数据指针尽量不要指向经常变动的vector数据之上。

     

    解决办法有2个:

    1、直接复制元素实体出去使用。

    2、估算vector在工程中的大小,初始化时初始化足够大的大小来存储vector元素。

    最新回复(0)