我知道当函数完成执行时,分配在该函数堆栈上的变量变得不可访问。但是,向量类型在堆上分配它们的元素,不管它们是如何分配的。例如,
vector<int> A;
将在堆而不是堆栈上为其元素分配空间。
我的问题是,假设我有以下代码:
int main(int argc, char *argv[]) {
// initialize a vector
vector<int> A = initVector(100000);
// do something with the vector...
return 0;
}
// initialize the vector
vector<int> initVector(int size) {
vector<int> A (size); // initialize the vector "on the stack"
// fill the vector with a sequence of numbers...
int counter = 0;
for (vector<int>::iterator i = A.begin(); i != A.end(); i++) {
(*i) = counter++;
}
return A;
}
在 main 函数中使用向量 A 时会出现内存访问问题吗?我尝试了几次,它们都正常工作,但我担心这可能只是运气。
我看到的方式是,向量 A 在堆上分配其元素,但它在堆栈本身上分配了一些“开销”参数(可能是向量的大小)。因此,如果这些参数被另一个分配覆盖,在主函数中使用向量可能会导致内存访问问题。有任何想法吗?