动态内存的传递

本文介绍了三种解决C语言中动态内存无法直接传递的方法:通过指向指针的指针、指针引用及函数返回值方式。并通过具体示例代码演示了如何避免内存泄漏等问题。

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

可以采用3中办法来解决动态内存不能传递的问题
在C语言中,可以通过采用指向指针的指针解决这个问题,可以把str的地址传给函数GetMemory.
在C++中,多了一种选择,就是传递str指针的引用;
使用函数返回值来传递动态内存;
代码如下:

#include <iostream>
using namespace std;
void GetMemory(char *p,int num)
{   
    p = (char*)malloc(sizeof(char)*num);
};
void GetMemory2(char **p,int num)
{
    *p = (char*)malloc(sizeof(char)*num);
};
void GetMemory3(char* &p,int num)
{
    p = (char *)malloc(sizeof(char)*num):
}
char *GetMemory4(int num)
{
    char *p = (char*)malloc(sizeof(char)*num);
    return p;
}
int main()
{
    char *str1 =NULL;
    char *str2 =NULL;
    char *str3 =NULL;
    char *str4 =NULL;
    //GetMemory(str1,20);
    GetMemory2(str2,20);
    GetMemory3(str3,20);
    str4 =GetMemory4(str4,20);
    strcpy(str2,"2");
    strcpy(str3,"3");
    strcpy(str4,"4");
    cout<<(str1==NULL?Yes:No)<<endl;
    cout<<str2<<endl;
    cout<<str3<<endl;
    cout<<str4<<endl;
    free(str2);
    free(str3);
    free(str4);
    str2 = NULL;
    str3 = NULL;
    str4 = NULL;
    return 0;
}

GetMemory函数并不能做任何有用的事情,由于从GetMemory函数返回时不能获得堆中内存的地址,那块堆内存就不能被继续引用,也就得不到释放,因此调用一次GetMemory函数就会产生num字节的内存泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值