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

本文介绍了一个生成Fibonacci数列的C++程序,并详细解释了如何正确地使用指针来分配和释放内存。文章展示了两种不同的指针使用方式,一种是返回局部数组的指针,这种方式可能导致非法内存访问;另一种是通过new分配堆内存并返回指针,这种方式需要程序员手动释放内存以避免内存泄漏。

提醒一下:
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!\nN is out of range!\nIt must be valued from 1 to 30!\n" << 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值