当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ malloc()用法及代码示例


函数malloc()在 C++ 中用于分配请求的字节大小,并返回指向已分配内存的第一个字节的指针。 Amalloc()在C++中是一个在运行时分配内存的函数,因此,malloc()是一种动态内存分配技术。如果失败则返回空指针。

用法:

pointer_name = (cast-type*) malloc(size);

这里,size是一个无符号整数值(转换为size_t),它表示以字节为单位的内存块

malloc()在 C++ 中 分配 size 字节的内存块,返回指向块开头的指针。新分配的内存块的内容未初始化,保留不确定的值。 Malloc 函数存在于 <cstdlib> 头文件中。

malloc() example

malloc() 的语法

malloc() 的返回类型

如果大小为零,则返回值取决于特定的库实现(它可能是也可能不是空指针),但返回的指针不应被取消引用。

  • 空指针用于函数分配的未初始化、已初始化的内存块
  • 空指针如果分配失败

内存块的工作和分配使用malloc()

示例 1:

C++


// C++ program to demonstrate working of malloc()
// cstdlib is used to use malloc function
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
    // size_t is an integer data type which can assign
    // greater than or equal to 0 integer values
    size_t s = 0; // s is SIZE
    // malloc declaration/initialization
    int* ptr = (int*)malloc(s);
    // return condition if the memory block is not
    // initialized
    if (ptr == NULL) {
        cout << "Null pointer has been returned";
    }
    // condition printing the message if the memory is
    // initialized
    else {
        cout << "Memory has been allocated at address "
             << ptr << endl;
    }
    free(ptr);
    return 0;
}
输出
Memory has been allocated at address 0x8cae70

free() 函数 在C++中用于动态地de-allocate memory 。

示例 2:

C++


// C++ program to demonstrate working of malloc()
#include <iostream>  
#include<stdlib.h>  
using namespace std;  
   
int main()  
{  
     // variable declaration
  int var_len = 10;
     
    // pointer variable declaration
  int *ptr;
   
  // allocating memory to the pointer variable using malloc()
  ptr = (int*) malloc(sizeof(int)*var_len);    
  for(int i=0;i<var_len;i++)  
  {  
      cout << "Enter a number : " << endl;  
      cin >> *(ptr+i);  
  }  
  cout << "Entered elements are : " << endl;  
   for(int i=0;i<var_len;i++)  
  {  
     cout << *(ptr+i) << endl;  
  }  
free(ptr);  
    return 0;  
}

输出:

malloc() initialization example

malloc()初始化的输出

Malloc应该用在什么地方?

1. 动态内存分配

动态内存分配帮助我们根据用户的需求分配一块内存。它返回一个指向该内存开头的指针,可以像数组一样对待它。

2.堆内存

malloc() 在堆上分配内存位置,并在堆栈上返回一个指针,指向正在分配的数组类型内存的起始地址,而静态数组大小对程序在任一时刻可以处理的数据量设置了硬性上限时间,无需重新编译。

3. 更长的使用寿命

使用 malloc 创建的变量或数组将存在终生,直到被清除为止。这对于 linked listsbinary heap 等各种数据结构非常重要。

新和malloc()之间的区别

新的 分配内存
新是一个操作符 malloc() 是函数
新调用构造函数 malloc()不调用构造函数
新返回确切的数据类型 malloc()返回空白*
新的永远不会返回NULL(失败时会抛出) malloc() 返回 NULL
new 不处理内存的重新分配 内存的重新分配可以通过malloc来处理
新的分配内存并调用构造函数 仅分配内存分配内存


相关用法


注:本文由纯净天空筛选整理自harsh_shokeen大神的英文原创作品 C++ malloc()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。