在C++遭遇的vector灵异事件

完整代码就不po了,核心代码大概是这样的

#include <iostream>
#include <vector>
std::vector<int> pool;
int alloc(){
	pool.push_back(0);
	return pool.size()-1;
}
int main(){
	pool.push_back(0);
	pool[0]=alloc();
	std::cout<<pool[0]<<std::endl;
}

pool里面已经有了一个元素,再由alloc往里面插入一个,size应该是2,返回值应该是1,pool[0]应该是1才对。然而输出是0。

坑爹的调了半天bug以后发现alloc以后vector被重新分配了,然而寻址寻到的还是原先的pool[0],所以甚至时不时会有Segmentation Fault的情况。

大概就是这样表情

羊踹玉兔,玉兔喊疼。