我想在从函数返回处理中获取地址后打印指针值但是,当我尝试逐个打印时,程序很好...... 但是当我尝试使用循环时,会发生一些事情......
继承我的代码:
int *fibo(int input){
int a=0,b=0,fib=1;
int arrfibo[input];
int *arrfib;
for(int i=0;i<input;i++){
a = b;
b = fib;
arrfibo[i] = fib;
fib = a + b;
}
arrfib = arrfibo;
cout << arrfib << endl;
return arrfib;
}
main(){
int inp;
cout << "Enter number of fibonancci = ";
cin >> inp;
int *arr;
arr = fibo(inp);
for(int i=0;i<inp;i++){
cout << *(arr + i) << " ";
} // something wrong here the result is (1 1 4462800 4663360 0)
}
谢谢,:))
答案 0 :(得分:1)
你要返回一个本地变量地址。超出范围时的未定义行为。
相反,使用new
创建一个数组
int *fibo(int input){
int a=0,b=0,fib=1;
int arrfibo = new int[input]; // <-- minimal line to change
int *arrfib; // <-- this is useless, you can directly return arrfibo
(当然,不再使用时,您必须delete []
数组。另一种方法是使用vector<int>
来避免所有new/delete
问题
答案 1 :(得分:0)
这个数组是在&#34; fibo&#34;的堆栈中分配的,当你在main中访问它时它已经被释放而你无法访问它