zoukankan      html  css  js  c++  java
  • C++ malloc()函数的注意点及使用示例

    1、malloc()函数的头文件是stdlib.h,其函数声明如下:

    void* malloc(size_t size);

    其中参数size_t size表示动态内存分配空间的大小,以字节为单位。

        size_t 是typedef重定义的类型,重定义这样数据类型的作用就是让使用者一目了然,指示使用者这个参数表示一个长度,在       size后加上t,表示是整型相关数据类型的,以后看到xxx_t的类型,通常都是整型相关数据类型重定义。

        在这里malloc()函数的返回值是一个指针,或者说是分配后内存空间的首地址

        如果malloc()函数申请空间成功则返回一段内存空间的首地址,失败则返回NULL

    2、

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

    在这里是不能这样写的,会出现错误:从类型 'void*' 到类型‘int’的转换无效,应该改为:

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

    3、在使用malloc()函数申请的空间之前,最好用memset()函数把这段内存空间清理一下,因为用malloc()函数申请的空间仅仅保证的是内存空间的大小,并不保证内存空间是否有数据垃圾。

    4、当不在使用malloc()函数申请的空间之后,应该使用如下函数释放掉这个内存空间:

    void  free(void *ptr);

         其中void *ptr是malloc()函数的返回值,也就是内存空间的首地址

         如果只知道使用,而不知道释放,则在7天*24小时运行的嵌入式产品中,很容易会出现内存泄漏,最终导致系统瘫痪

    5、malloc()函数动态分配空间编程:

     1 /***************************************
     2 malloc()函数动态分配空间编程:
     3 (1)定义一个char*型指针变量p
     4 (2)为p分配10个字节的内存空间
     5 (3)复制"come on" 字符串到p指向的内存空间
     6 (4)将p指针指向的内存空间再扩大20个字节
     7 (5)将",baby!"字符复制在p指向空间字符串的后面
     8 (6)释放p指向的空间
     9 ****************************************/
    10 #include <iostream>
    11 #include <cstdlib>
    12 #include <cstring>
    13 using namespace std;
    14 
    15 int main()
    16 {
    17   char *p;
    18   p = (char *)malloc(10*sizeof(char));
    19 
    20   memset(p,0,10*sizeof(char));
    21 
    22   strcpy(p,"come on");
    23   cout << "p: " << p << endl;
    24 
    25   p =(char *)realloc(p,20*sizeof(char));
    26   cout << "p: " << sizeof(p) << endl;
    27 
    28   strcat(p,",baby!");
    29   cout << "p: " << p << endl;
    30 
    31   free(p);
    32    return 0;
    33 }

    输出:

    1 p: come on
    2 p: 4
    3 p: come on,baby!



  • 相关阅读:
    内存页面的各种属性(就是Read, Write, Execute的组合)
    分配粒度和内存页面大小(x86处理器平台的分配粒度是64K,内存页是4K,所以section都是0x1000对齐,硬盘扇区大小是512字节,所以PE文件默认文件对齐是0x200)
    NULL指针区域(NULL定义为0-65535之间的任何数都可以)
    Tiny Mapper是一个.net平台开源的对象映射组件
    表达式树动态拼接lambda
    VSC调试.NET Core 应用程序
    领域驱动设计之单元测试最佳实践
    web框架python
    无需安装Mono的Jexus
    分布式发布订阅消息系统Kafka
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12365716.html
Copyright © 2011-2022 走看看