我知道函数栈上分配的变量在函数执行完毕后就无法访问了。然而,无论如何分配,向量类型都会将其元素分配在堆上。例如:
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;
}
当我在主函数中使用向量A时,我会遇到内存访问问题吗?我尝试过几次,它们都正常工作,但我担心这可能只是运气。
我的理解是,向量A在堆上分配其元素,但它具有一些“开销”参数(可能是向量的大小)在堆栈本身上分配。因此,在主函数中使用向量可能会导致内存访问问题,如果这些参数被另一个分配覆盖。有什么想法吗?
int add(int a, int b) {int r = a + b; return r}
应该和你怀疑的initVector
有同样的问题... - user395760vector<int> A (size);
=>A
存储在栈上,但它所指向的内存位置存储在堆上。size
个连续的内存位置存储在堆上,而 vector 类在堆上保存了指向开始元素的指针。让我们看看是否有人能纠正我。 - Mahesh