zoukankan      html  css  js  c++  java
  • malloc函数

    malloc函数简介
    须要包括头文件:#include '<stdlib.h>
    函数声明(函数原型):void *malloc(int size);
    函数功能:在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
    说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。
    C,C++规定,void* 类型能够强制转换为不论什么其他类型的指针。

    从函数声明上能够看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,而且能够自己主动计算所须要大小。比方:

    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 * 类型。假设你写成: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得到指针。在其他操作上保持一致。

  • 相关阅读:
    python模块win32com中的early-bind与lazy-bind(以Autocad为例)
    Beautiful code and beautiful life
    PyPI 使用的国内源
    JavaScript在SublimeText中的配置
    Python中的模块包
    FTP 服务器在WIN10上的搭建及服务端下载文件实例
    Oracle ASM磁盘组兼容性
    oracle ADVM
    053-28
    053-27
  • 原文地址:https://www.cnblogs.com/a-s-m/p/10992889.html
Copyright © 2011-2022 走看看