当前位置:首页 > 内存 > 正文

申请动态内存空间的函数

  • 内存
  • 2024-08-17 18:17:59
  • 4190

一、c++中malloc和alloc函数的声明和调用格式以及其功能函数malloc()和calloc()都可以用来动态分配内存空间,但是它们之间有细微的差别。
malloc()函数有一个参数,即要分配的内存空间的大小:
void*malloc(size_tsize);
calloc()函数有两个参数,即是元素的数量。以及每个元素的大小。这两个参数的乘积就是要分配的内存空间的大小。
void*calloc(size_tnumElements,size_tsizeOfElement);

pthread_t*tid;
tid=(pthread_t*)calloc(numthrds,sizeof(pthread_t));
如果调用成功,函数malloc()和函数calloc()都会返回所分配内存空间的首地址。
函数malloc()和函数calloc()的主要区别是前者不能初始化分配的内存空间,而后者可以。如果malloc()函数分配的内存空间之前没有被使用过,那么其中的每一位都可能为0;反之,如果这部分内存之前已经分配过,那么里面可能还剩下各种数据。也就是说,使用malloc()函数的程序在刚开始时(内存空间尚未重新分配)可以正常运行,但一段时间后(内存空间已重新分配)可能会出现问题。
函数calloc()会将分​​配的内存空间中的每一位初始化为零。也就是说,如果你为字符类型或整数类型的元素分配内存,那么这些元素将保证被初始化为0;如果为指针类型元素分配内存,这些元素通常会被初始化为空指针;如果为实际数据分配内存,这些元素将被初始化为浮点零。
此外,calloc返回一个对象数组,而malloc返回一个对象。使用calloc表示要使用数组。