指针与动态内存

本文探讨了在C/C++中使用指针进行动态内存分配的常见误区与正确实践,包括函数参数传递、指针的指针应用及返回指针的方式,避免内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

碰到一个指针的问题,记录一下。

都知道,使用指针作为函数形参,可以在函数内修改其指向的内容。

将函数的形参返回,会因为生存期的问题,不能得到正确返回值。

如果返回的是new出来的指针变量(存在堆上,不在栈上),那么函数结束,就不会被该内存就不会被收回。

有以上,我们来看下面的问题

void GetMemory(char *p)
{
    p = (char *)malloc(100);
}
void Test(void) 
{
    char *str = NULL;
    GetMemory(str);	
    strcpy(str, "hello world");
    printf(str);
}

在GetMemory中传入指针变量,然后在函数内对其进行动态内存分配,然而并不会出现理想输出。

是因为通过GetMemory不能传递动态内存。Test中的str一直是NULL

但是

回去看第一句话,如果使用指针作为函数形参,可以在函数内修改其指向的内容。

引申过来,我们能不能用指针的指针作为形参,然后给该指针动态分配内存呢?答案是可以的

void GetMemory2(char **p, int num)
{
    *p = (char *)malloc(num);
}
void Test(void)
{
    char *str = NULL;
    GetMemory(&str, 100);
    strcpy(str, "hello");	
    printf(str);	
}

以上代码先定义char* str ,然后使用&str传入str的地址,然后给  str 分配的动态内存。但是好像由于使用了&str,会发生内存泄漏?

所以最好还是使用返回指针的形式,进行动态内存分配。

char *GetMemory()
{ 
  char *p=(char *)malloc(100); 
  return p; 
} 
void Test(void){ 
  char *str=NULL; 
  str=GetMemory();
  strcpy(str,"hello world"); 
  printf(str); 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值