C语言和C++对于内存管理的区别(开辟内存和释放内存)

C语言:

1.开辟内存:malloc()               使用malloc 缺点 :  (1)、容易导致越界;例如:int *p = (int *)malloc(1); 明显指针大小为4字节,一个字节明显不够                                                              

                                                                                 (2)、  没有(不可以)初始化;

2.释放内存:free()

C++:

1.开辟内存:new + 类型;   例如:int *p = new int;

2.释放内存:delete + 开辟内存的变量名; 例如:delete p;

注意几点问题:    C++数组只可以做'0'初始化:int *a = new int[10]();    //初始化为0;

                             开辟常量类型一定要初始化:const int *a = new const int(10); 

                             重定位new:        int a;

                                                       char *p = new (&a) char('a');    //从a的内存中截取一字节给char 'a'使用,不用释放p的内存;

开辟数组内存:

1.一维数组:

                  C语言:int *a  =  (int *) malloc(sizeof(int)*10);     释放:free(a);

                  C++:     int *a = new int[10];     释放:delete [] a;

2.二维数组:

                 C语言:

int **a = (int**)malloc(sizeof(int*)*10);   //a[10][10]大小
for(int i = 0;i<10;i++)
{
    a[i] = (int *)malloc(sizeof(int)*10)
}
//释放二维数组时,先释放一维数组,再释放二维数组
for(int i=0;i<10;i++)
{
    free(a[i]);//先释放一维指针

}
free(a);//最后释放我二维指针 

                    C++:

int **a = new int*[10];
for(int i = 0;i<10;i++)
{
    a[i] = new int[10];
}
//释放二维数组时,先释放一维数组,再释放二维数组
for(int i=0;i<10;i++)
{
    delete (a[i]);  //先释放一维数组
    a[i] = NULL; //防止野指针
}
delete a;  //再释放二维数组
a =  NULL;

new和malloc的区别:

1.new是从自由存储区域开辟;malloc是从堆上开辟;

2.new的返回值类型安全;mallo返回值类型不安全;

3.new不需要计算内存的开辟大小;malloc需要计算开辟内存的大小;

4.new抛出异常(bad_alloc);malloc返回值为空;

5.new可以初始化;malloc不可以初始化;

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
C语言中,指针是一种非常重要的数据类型,用于存储内存地址。通过指针,程序可以访问和操作内存中的数据。指针在C语言中有着广泛的应用,包括动态内存分配、数组和函数调用等方面。 指针的使用使得程序员能够更直接地操作内存,但也带来了内存管理的责任。C语言中的内存管理是程序员需要关注的一个重要方面[1]。在C语言中,内存的分配和释放需要手动进行。如果不正确地管理内存,就容易出现内存泄漏、野指针等问题,导致程序崩溃或出现难以调试的错误。 动态内存分配是指在程序运行时根据需要分配内存空间。C语言提供了一些函数来实现动态内存分配,例如malloc、calloc和realloc函数。这些函数允许程序在运行时动态地请求所需的内存空间。 使用动态内存分配时,程序员需要负责在不再需要使用内存时手动释放已分配的内存空间,以免造成内存泄漏。释放内存的函数是free函数,通过调用free函数可以将先前分配的内存空间释放回系统。 除了动态内存分配外,C语言中还有一些其他的内存管理技术。例如,对于大型数据结构或数组,可以使用指针来减少内存的占用和提高程序的效率。此外,C语言中还有一些规则和约定来确保内存的正确使用,如避免野指针、空指针和越界访问等。 综上所述,C语言中的指针和内存管理密切相关。指针使程序能够直接操作内存,但也需要程序员正确地管理内存的分配和释放。通过动态内存分配和其他内存管理技术,可以有效地利用和管理内存,提高程序的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值