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!



  • 相关阅读:
    幂等性知识学习梳理
    使用Less,FontAwesome 重写EasyUI TreeGrid样式
    根据表达式树动态生成Lambda表达式
    elasticsearch-query-builder, 一款可以基于配置化以及参数绑定的ES语句构造神器
    hadoop2 5个环境配置文件
    hadoop3.0.0 分布式集群安装过程
    linux 常用命令
    securecrt 常用快捷键
    java 面试题
    Spark Streaming 读取 Kafka 数据的两种方式
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12365716.html
Copyright © 2011-2022 走看看