据我所知,在c++中调用一个函数后,它的内存被释放给另一个变量。如果它没有分配给另一个变量,那么变量应该动态地分配内存。
#include<iostream>
using namespace std;
void init_values(int arr[]){
for(int i=0;i<100;i++){
arr[i]=i;
}
}
void display(int arr[]){
for(int i=0;i<100;i++){
cout<<arr[i] << " ";
}
}
int main(){
int arr[100];
init_values(arr);
display(arr);
}
我原以为函数会显示垃圾信息,否则会显示错误。但它正确显示了这些值。
发布于 2019-06-19 05:14:11
void init_values(int arr[]){
for(int i=0;i<100;i++){ // i is created here
arr[i]=i;
} // i goes out of scope here
}
这里没有问题,以后也不会尝试使用i
。
void display(int arr[]){
for(int i=0;i<100;i++){ // i is created here
cout<<arr[i] << " ";
} // i goes out of scope here
再说一次,没问题。
int main(){
int arr[100]; // arr is created here
init_values(arr);
display(arr);
} // arr goes out of scope here
当我们调用init_values
和display
时,arr
仍然在作用域中,因为它的生命周期在创建它的作用域的末尾结束。所以在这些函数调用期间,它仍然在作用域内。
现在,这将是一个问题:
int *init_values(void){
int arr[100];
for(int i=0;i<100;i++){
arr[i]=i;
}
return arr;
}
为什么?想想看:
int *init_values(void){
int arr[100]; // arr is created here
for(int i=0;i<100;i++){
arr[i]=i;
}
return arr;
} // arr goes out of scope here
所以init_values
的调用者会收到一个指向arr
的内容的指针,即使在我们退出这个函数后arr
不存在。这个函数的返回值不能被安全地使用。你的代码不会这样做。
https://stackoverflow.com/questions/56654296
复制相似问题