C++ 函数返回数组指针的问题

提醒一下:
int *func()
{
int a[10] = {5};
return a;
}
是非法的,因为 a 是局部变量,被申请在系统栈中,局部变量在函数返回后会被销毁,于是你返回的指针指向的是一段已经被系统回收的内存,这样的访问是非法的。
int *func()
{
int *a = new int[10];
a[0] = 5;
return a;
}
是合法的,通过new运算符申请的一段内存是在系统堆上的,其销毁不受系统控制,而由程序员控制,所以如果在外部有int *ret = func(),将 ret 使用完毕后需及时 delete ret;,否则可能造成内存泄露。

fabonacci.cpp

#include <iostream>

using namespace std;

int *fabonacci(int n)
{
    if(30 >= n > 0)
    {
        int *array = new int[n];
        switch(n)
        {
            case 1:
            {
                array[0] = 1;
                cout << array[0] << endl;
                break;
            }
            case 2:
            {
                array[0] = 1;
                array[1] = 1;
                cout << array[0] << endl;
                cout << array[1] << endl;
                break;
            }
            default:
            {
                array[0] = 1;
                array[1] = 1;
                cout << array[0] << endl;
                cout << array[1] << endl;
                for(int i = 2; i < n; i++)
                {
                    array[i] = array[i - 1] + array[i - 2];
                    cout << array[i] << endl;
                }
            }
        }
        return array;
    }
    else
    {
        cout << "Error!
N is out of range!
It must be valued from 1 to 30!
" << endl;
        return NULL;
    }
}


int main()
{
    int *p = fabonacci(10);
    if(p != NULL)
    {
        int n = 5;
        cout << "*(p + " << n << ") = " << *(p + n) << endl;
    }
    delete(p);
    return 0;
}

1

原文地址:https://www.cnblogs.com/blog-3123958139/p/5582625.html