• malloc calloc realloc


      calloc(), malloc(), realloc(), free() 


     http://www.cnblogs.com/hnrainll/archive/2011/07/27/2118812.html
     
     void *calloc(size_t nobj, size_t size);
     分配足够的内存给nobj个大小为size的对象组成的数组, 并返回指向所分配区域的第一个字节的指针;
     若内存不够,则返回NULL. 该空间的初始化大小为0字节.
     char *= (char *) calloc(100sizeof(char));
     
     

    void *malloc(size_t size);
    分配足够的内存给大小为size的对象, 并返回指向所分配区域的第一个字节的指针;
      若内存不够,则返回NULL. 不对分配的空间进行初始化.
    char *= (char *) malloc(sizeof(char));


    void *realloc(void *p, size_t size);
      将p所指向的对象的大小改为size个字节. 
    如果新分配的内存比原内存大, 那么原内存的内容保持不变, 增加的空间不进行初始化.
    如果新分配的内存比原内存小, 那么新内存保持原内存的内容, 增加的空间不进行初始化.
    返回指向新分配空间的指针; 若内存不够,则返回NULL, 原p指向的内存区不变.
    char *p,*q; 
    = (char *) malloc(sizeof(char)); 
    q= (char *) realloc(p, 256); 
    if (q==NULL) 
    return -1
    p=q;  

     

    void free(void *p);
    释放p所指向的内存空间; 当p为NULL时, 不起作用.
    p必先调用calloc, malloc或realloc.
    free(p);

     

    //=============================================

    一个bug,在查询生成一种图形报表时,底层c-driver报错.通过debug追踪到执行

    (char *) realloc(instr, length + (sizeof(char)* (num * 5)))

    这句时出的错,很是纳闷,反向追踪发现程序有的地方在调用上述函数时,传递给参数instr的指针变量是静态分配的变量,如:

    char tmpStr[4096];   这样定义的tmpStr变量将被固定了大小空间,是不允许再重新分配空间大小的,传递给instr时,使用realloc重新给该变量分配内存空间时必然出错.

    realloc函数只能给通过malloc函数获取空间的变量重新分配空间,即:

    char *tmpStr=(char *)malloc(4096*sizeof(char));

    此时变量tmpStr才能允许使用 realloc重新分配空间.

     

  • 相关阅读:
    python全栈开发从入门到放弃之内置函数
    python全栈开发从入门到放弃之递归函数的调用
    python全栈开发从入门到放弃之字典的应用
    python全栈开发从入门到放弃之元组的内置应用
    python全栈开发从入门到放弃之装饰器函数
    [LeetCode-JAVA] Remove Duplicates from Sorted Array II
    [LeetCode-JAVA] Simplify Path
    [LeetCode-JAVA] Permutations
    tensorboard在windows系统浏览器显示空白的解决writer =tf.summary.FileWriter("logs/", sess.graph)
    Windows64位安装CPU版TensorFlow
  • 原文地址:https://www.cnblogs.com/liulipeng/p/2706157.html
Copyright © 2020-2023  润新知