zoukankan      html  css  js  c++  java
  • malloc使用方法

    malloc使用方法

    须要包括头文件:

    #include 'stdlib.h'

    函数声明(函数原型)

    void *malloc(int 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 [] 的效果。申请出一段连续的内存,方法无非是指定你所须要内存大小。

    比方想分配100int类型的空间:

    int* p = (int *) malloc ( sizeof(int) * 100 ); //分配能够放得下100个整数的内存空间。

     

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

    除了分配及最后释放的方法不一样以外,通过mallocnew得到指针。在其他操作上保持一致。

    free使用方法

    须要包括头文件( malloc 一样)

    #include 'stdlib.h'

    函数声明:

    void free(void *block);

    即: void free(指针变量)

     

    之所以把形參中的指针声明为 void* 。是由于free必须能够释放随意类型的指针,而随意类型的指针都能够转换为void *

     

    举例:

     

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

     

    *p = 100;

     

    free(p); //释放 p 所指的内存空间

     

    或者:

     

    int* p = (int *) malloc ( sizeof(int) * 100 ); //分配能够放得下100个整数的内存空间。

     

    ……

     

    free(p);

     

    free 无论你的指针指向多大的空间,均能够正确地进行释放。这一点释放比 delete/delete [] 要方便。

    只是。必须注意。假设你在分配指针时。用的是newnew[],那么抱歉,当你在释放内存时,你并不能图方便而使用free来释放。反过来。你用malloc 分配的内存,也不能用delete/delete[] 来释放。一句话,new/deletenew[]/delete[]malloc/free 三对均需配套使用。不可混用。

    int* p = new int[100];

    free(p);      //ERROR! p 是由new 所得。

     

    函数malloc()calloc()都能够用来动态分配内存空间,但两者稍有差别。

    malloc()
    数有一个參数,即要分配的内存空间的大小
    :
    void *malloc(size_t size);

    calloc()
    函数有两个參数,分别为元素的数目和每一个元素的大小,这两个參数的乘积就是要分配的内存空间的大小。

    void *calloc(size_t numElements,size_t sizeOfElement);

    假设调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。


    函数malloc()和函数calloc()的主要差别是前者不能初始化所分配的内存空间,而后者能。假设由malloc()函数分配的内存空间原来没有被使用过。则当中的每一位可能都是0;反之,假设这部分内存以前被分配过,则当中可能遗留有各种各样的数据。也就是说,使用malloc()函数的程序開始时(内存空间还没有被又一次分配)能正常进行,但经过一段时间(内存空间还已经被又一次分配)可能会出现故障。



    函数calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,假设你是为字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;假设你是为指针类型的元素分配内存,那麽这些元素一般会被初始化为空指针;假设你为实型数据分配内存,则这些元素会被初始化为浮点型的零。




    须要包括头文件:

    i nclude <mallco.h>

    i nclude <stdlib.h>

     

  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4595547.html
Copyright © 2011-2022 走看看