关于用指针作为函数参数申请动态内存

其实一个很简单的问题,却现在才想明白,真suck...

相信我们都知道传值调用参数时,不改变实际参数的值。原理:形参是实参的一个copy(副本),而不是指向同一块内存地址。于是用指针或引用就可以解决这个问题,大多数时候还会节省内存开销,因为不用作副本拷贝。

这样一个例子:

void test(char *ps)
{
 ps = (char *)malloc(10*sizeof(char));
}

int main(void)
{
 char *str = NULL;

 test(str);
 strcpy(str, "abcd");
 cout << str << endl;
 return 0;

用指针作为参数,在函数内部申请动态内存,结果该程序会崩溃。

原因其实很简单,ps申请了内存,也就是改变了ps这个副本的内容(即申请的动态内存地址),但函数返回了,原形参ps的内容没有任何改变,就如同上述的传值一样,ps的内容仍为NULL,于是出错。

而且不但出错,该程序还会出现内存泄露的问题,因为malloc的这块内存未释放,也无法释放了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值