C与C++动态分配内存的区别

如题所述

c语言提供内存动态分配的函数有:malloc、calloc、realloc,在使用这些函数时必须包含其头文件,分别为:<malloc.h>、<stdlib.h>、<alloc.h>
1) malloc 函数: void *malloc(unsigned int size)
在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。
2)calloc 函数: void *calloc(unsigned int num, unsigned int size)
按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。
calloc申请内存空间后,会自动初始化内存空间为 0,但是malloc不会进行初始化,其内存空间存储的是一些随机数据。
3)realloc 函数: void *realloc(void *ptr, unsigned int size)
动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size。
申请的内存空间不会进行初始化。
释放的函数为free函数:
free函数原型为:void free(void *ptr)
作用:释放由上面3种函数所申请的内存空间。
参数:ptr:指向需要释放的内存空间的首地址。

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
申请和释放堆中分配的存储空间,分别使用new 和 delete 的两个运算符来完成:
指针变量名 = new 类型名(初始化式);
delete 指针名;
例如:
int *pi = new int(0)

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可以用于申请动态内存和释放内存。
对于非内部数据类型对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free.
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-08
C++中一般用new 和delete搭配使用吧。是操作符。
C中一般用malloc free,是函数
但是二者使用的时候有区别,格式不一样。
功能也不同,malloc可以在原来的基础上继续开辟内存。
第2个回答  2012-05-08
C++中一般用new 和delete搭配使用吧。是操作符。
C中一般用malloc free,是函数
第3个回答  2012-05-08
C中还有calloc alloc

c++和c语言的区别
一、主要语言特性差异 1. 动态内存管理:C语言需要程序员手动管理内存,包括分配和释放。而C++提供了自动垃圾收集机制,允许程序在不再需要时自动释放内存。这使得C++开发过程中更不易出现内存泄露问题。2.面向对象编程支持:C语言不支持面向对象编程,而C++则全面支持类、对象、继承、多态等面向对象概念。...

C与 C++ 的真正区别在哪里?
另外,C语言编译器所看到的程序码,与程序设计者所看到的程序码是不同的。程序设计者看到的是尚未经过预处理器处理过的程序码,而编译器看到的则是经过预算过的程序码,一旦交给预处理器处理的宏集内容有误,编译器所产生的出错信息将无法使程序设计者判断。这一点也增加了程序除错的困难。2.不再有sture...

c语言和c++的区别和联系是什么?
一、区别 1. 语言特性:C语言是一种过程式编程语言,注重过程和函数;而C++是一种面向对象的语言,除了过程,更注重对象、类及其操作。2. 内存管理:在C语言中,程序员负责管理所有内存分配和释放;而在C++中,除了手动管理内存外,还引入了自动内存管理,如智能指针等。3. 扩展性:相较于C语言,C++...

c语言和c++的区别和联系
区别:1. 语言特性 C语言:是一种面向过程的语言,关注程序执行流程。它以函数为单位进行编程,注重数据的存储和访问。C++语言:是一种面向对象的语言,不仅包含面向过程的特性,更强调对象、类、封装、继承和多态等概念。2. 兼容性 C语言是C++的一个子集,也就是说任何有效的C语言程序在稍作修改后都...

c和c++具体区别?
C和C++的主要区别 一、基本区别 C是一种过程式语言,更注重对程序执行流程的控制,如函数、循环和条件语句的使用。而C++是基于C语言的面向对象扩展,除了过程式编程,更加强调对象的封装、继承和多态。二、详细解释 1. 语法差异:C++相较于C,新增了许多功能,例如类、对象、继承等。这些特性在C语言中...

c和c++区别
c与c++的区别在于它们的运用领域不同。1、C++是面向对象语言,C是面向过程语言。2、结构:C以结构体struct为核心结构;C++以类class为核心结构。3、多态:C可以以宏定义的方式“自定义”部分地支持多态;C++自身提供多态,并以模板templates支持编译期多态,以虚函数virtual function支持运行期多态。4、头...

C#和C++的区别?
二、来源不同 1、C#:C##是由C和C++衍生出来的编程语言。2、C++:C++是C语言的继承自C的编程语言。三、内存释放不同 1、C#:C#有自动垃圾收集功能,能够实现内存自动释放。2、C++:C++没有自动垃圾收集功能,不能够实现内存自动释放,需要手动释放。

c语言和c++语言有什么区别
1. 语法差异:虽然C++是基于C语言的,但两者在语法上存在诸多不同。例如,C++支持更多的数据类型和操作符号,如引用、动态内存分配等。此外,C++支持类和对象的概念,具有继承、多态等特性。而C语言更注重基本的数据操作和功能实现。2. 面向对象支持:C语言不支持面向对象编程,而C++则全面支持。面向对象...

c与c++的区别有哪些
9. 语言特性:a. 数组:C语言使用内置数组,C++推荐使用向量(vector),后者具有动态大小和丰富的成员函数。b. 字符串:C语言使用C风格字符串,C++推荐使用string类,提供更多功能。c. 内存分配:C语言使用malloc和free,C++使用new和delete,后者是运算符,并提供更复杂的内存管理。d. 指针:C语言使用...

动态分配内存动态分配内存的方法(C\/C++)
动态分配内存是程序设计中的一种重要技术,它允许程序在运行时根据实际需求动态地分配和释放内存空间。在C\/C++语言中,动态分配内存通常使用关键字new和delete来完成。新关键字new可以用于生成动态无名变量,例如`int *p=new int;`表示动态分配一个整型内存空间,并将首地址返回给指针p。同样,`int *p=...

相似回答