如何用循环

时间:2016-11-24 16:00:36

标签: c++ pointers

我想在从函数返回处理中获取地址后打印指针值但是,当我尝试逐个打印时,程序很好...... 但是当我尝试使用循环时,会发生一些事情......

继承我的代码:

    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)
    }

谢谢,:))

2 个答案:

答案 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中访问它时它已经被释放而你无法访问它