malloc怎么使用,请举例说明,谢谢!

我在自学C语言,这个东西看不懂,请感受帮帮忙啊!

malloc使用须要包括头文件:

#include 'stdlib.h'

例如:

int *p;

p = new int;  /返回类型为int* 类型(整数型指针)。分配大小为 sizeof(int);

或:

int* parr;

parr = new int [100];   //返回类型为 int* 类型(整数型指针)。分配大小为 sizeof(int) * 100;

而 malloc 则必须由我们计算要字节数,而且在返回后强行转换为实际类型的指针。

int* p;

p = (int *) malloc (sizeof(int));

扩展资料:

malloc 函数返回的是 void * 类型。

对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。

所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,养成强制转换的习惯。

在Linux中可以有这样:malloc(0),这是因为Linux中malloc有一个下限值16Bytes,注意malloc(-1)是禁止的;但是在某些系统中是不允许malloc(0)的。

在规范的程序中我们有必要按照这样的格式去使用malloc及free:

type *p;

if(NULL == (p = (type*)malloc(sizeof(type))))

/*请使用if来判断,这是有必要的*/

{

perror("error...");

exit(1);

}

.../*其它代码*/

free(p);

p = NULL;/*请加上这句*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-03
malloc 原型:extern void *malloc(unsigned int num_bytes);
用法:#include <malloc.h>
或#include<stdlib.h>
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
malloc的语法是:指针名=(数据类型*)malloc(长度),(数据类型*)表示指针.
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。本文简单介绍动态内存分配函数malloc()及几种实现方法。
1. 简介
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。还有一点必须注意的是,当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。
2. 函数说明
C语言的动态存储管理由一组标准库函数实现,其原型在标准文件<stdlib.h>里描述,需要用这些功能时应包含这个文件。与动态存储分配有关的函数共有四个,其中就包括存储分配函数malloc()。函数原型是:void *malloc (size_t n);这里的size_t是标准库里定义的一个类型,它是一个无符号整型。这个整型能够满足所有对存储块大小描述的需要,具体相当于哪个整型由具体的C系统确定。malloc的返回值为(void *)类型(这是通用指针的一个重要用途),它分配一片能存放大小为n的数据的存储块,返回对应的指针值;如果不能满足申请(找不到能满足要求的存储块)就返回NULL。在使用时,应该把malloc的返回值转换到特定指针类型,赋给一个指针。
注意,虽然这里的存储块是通过动态分配得到的,但是它的大小也是确定的,同样不允许越界使用。例如上面程序段分配的块里能存n个双精度数据,随后的使用就必须在这个范围内进行。越界使用动态分配的存储块,尤其是越界赋值,可能引起非常严重的后果,通常会破坏程序的运行系统,可能造成本程序或者整个计算机系统垮台。
下例是一个动态分配的例子:
#include <stdio.h>
#include<stdlib.h>
main()
{
int count,*array; /*count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/
count=100;
if((array=(int *)malloc(10*sizeof(int))) == NULL)
{
printf("不能成功分配存储空间。");
exit(1);
}
for(count=0;count<10;count++) /*给数组赋值*/
array[count]=count;
for(count=0;count<10;count++) /*打印数组元素*/
printf("%2d",array[count]);
}
上例中动态分配了10个整型存储区域,然后进行赋值并打印。例中if((array=(int *) malloc (10*sizeof(int)))==NULL)语句可以分为以下几步:
1)分配10个整型的连续存储空间,并返回一个指向其起始地址的整型指针
2)把此整型指针地址赋给array
3)检测返回值是否为NULL本回答被提问者采纳
第2个回答  2009-10-09
char *p,
p=(char*)malloc(char)
是申请一个动态单元的函数
原形是void * malloc(单元大小)
返回值是一个指针,是个地址
单元大小可以是2,3,4,随便写,与具体环境有关
例如,struct num{int i,long j;}*p;
你就可以这样写p=(struct num* )malloc(sizeof(struct student))就是分配一个大小为sizeof(struct student )的单元给指针p
第3个回答  2009-10-08
申请动态内存
char型的:
char* ch = (char*)malloc(sizeof(char)*n)
里面n为你要申请的字节个数
int型的:
int* nNum = (int*)malloc(sizeof(int)*n)
里面n为你要申请的每四字节的个数。
用完后最后要free(ch)掉你申请的内存空间,以免内存泄漏
第4个回答  2020-05-11
相似回答