malloc怎么用( 二 )


int* p;
p = (int *) malloc (sizeof(int));
第一、malloc 函数返回的是 void * 类型,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量” 。所以必须通过 (int *) 来将强制转换 。
第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小 。如果你写成:
int* p = (int *) malloc (1);
代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容全部被清空 。
malloc 也可以达到 new [] 的效果,申请出一段连续的内存,方法无非是指定你所需要内存大小 。
比如想分配100个int类型的空间:
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间 。
另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的 。
除了分配及最后释放的方法不一样以外,通过malloc或new得到指针,在其它操作上保持一致 。
4.malloc怎么使用,请举例说明,谢谢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个双精度数据,随后的使用就必须在这个范围内进行 。越界使用动态分配的存储块,尤其是越界赋值,可能引起非常严重的后果,通常会破坏程序的运行系统,可能造成本程序或者整个计算机系统垮台 。