为函数的传递参数动态分配内存

 

   很多情况下,需要在函数体中对输入参数进行动态分配内存,

   示例如下:

 void fun(int *a)
 {
     a=new int [10];
     for (int i=0;i<10;i++)
     {
        a[i]=i;
     }
  }

 

   但是在函数体外试图访问 a时,却发生内存访问错误,这是因为:编译器在fun()函数中,复制了a 指针(假设为_a),new int [10]也只是为_a 分配了内存,与a无关;在函数结束时,_a的空间被释放,对a 指针没有任何影响。   

    [如果函数的参数是一个指针,不要指望用该指针去申请动态内存] (林锐《高质量C/C++编程指南》

    如果你使用的是C++语言,可以考虑采用vector 来解决此类问题,代码如下:

    void fun(vector<int> &a)
    {
        a.resize(10);
        for (int i=0;i<10;i++)
        {
            a[i]=i;

        }
    }


    这样,在函数执行完毕后,就可以访问a在fun()中分配的元素了。

    (C语言的解决办法还没找到,欢迎讨论)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值