位置:首页 > 软件操作教程 > 编程开发 > C语言 > 问题详情

C语言 malloc()函数

提问人:刘团圆发布时间:2020-12-03

malloc()函数原型如下:

    void *malloc(int size);

malloc()向系统申请分配指定size个字节的内存空间。返回类型是void*类型。void*表示未确定类型的指针。void1*类型可以强制转换为任何其他类型的指针。

从函数声明上可以看出。malloc()和new()至少有两个不同:

(1)new()返回指定类型的指针,且可以自动计算所需要大小。比如:

int *p;

var cpro_psid ="u2572954";

var cpro_pswidth =966; 

var cpro_psheig =120;

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

sizeof(int);    或:   int* parr;

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

sizeof(iirt) * 100;

(2)mallocO则必须计算宇节数,并且在返回后强行转换为实际类型的指针。

    int* p;

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

malloc函数返回的是void*类型,如果写成如下格式:

    p = malloc (sizeof(int));

程序无法通过编译,且报如下错误:“不能将void*赋值给int*类型变量”。所以必须通过(int *)来将强制转换。

函数的实参为sizeof(int),用于指明一个整型数据需要的大小。如果写成如下格式:

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

代码也能通过编译,但只分配了1个字节的内存空间,当存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!这会导致后面的内存中原有数据内容全部被清空。mallocO也可以达到new[]的效果,申请出一段连续的内存,方法无非是指定所需内存大小。比如想分配100个int类型的空间:

    int* p =(int *)malloc(sizeof(int)*100);  //分配可以放得下100个聲敎的内.存空间

另外有一点无法直接看出的区别是,malloc()只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。

除了分配及最后释放的方法不一样以外,通过mallocO或new()得到指针,在其他操作上保持一致。malloc()函数其实就是在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量。这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址。这取决于malloc()函数中参数size的具体内容。这里mallocO分配的内存空间在逻辑是连续的,而在物理上可以连续也可以不连续。对于程序员来说,关注的是逻辑上的连续,因为操作系统会帮助安排内存分配,所以使用起来就可以当作是连续的。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部