• malloc calloc realloc


    三个函数的申明分别是: 
    void* realloc(void* ptr, unsigned newsize); 
    void* malloc(unsigned size); 
    void* calloc(size_t numElements, size_t sizeOfElement); 
    都在stdlib.h函数库内

        (1)函数malloc()
            在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址.

        需要手动清0

        (2)函数calloc()
            与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,即在内存中申请numElements*sizeOfElement字节大小的连续地址空间.  同时初始化了这块内存
        (3)函数realloc()
            给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度.

        需要手动清0

    char* p; 
    p=(char*)malloc(20);
    memset(p,0,20); //如果申请成功,要做初始化处理
    char* p; p=(char*)calloc(20,sizeof(char)); char* p; p=(char*)malloc(sizeof(char)*20); p=(char*)realloc(p,sizeof(char)*40);
    memset(p,0,40);//如果申请成功,要做初始化处理
    free(p); //释放后,要把指针指向null
    p = NULL;

    strcat 合并栈空间的局限性。栈空间不可伸缩,合并越界,没有办法解决

    myStrcat 合并堆内存,堆内存可以伸缩,解决了合并越界的问题。

    #include <stdio.h>
    #include <string.h>
    
    #define SIZE 5
    char* myStrcat(char **dest, char *src)
    {
    int destLen = strlen(*dest);
    char *tmp = *dest; //申请失败返回
    int srcLen = strlen(src);
    //    *dest = (char*)realloc(*dest, destLen + srcLen + 10000000000000000000);
    *dest = (char*)realloc(*dest, destLen + srcLen);
    if (*dest == NULL){
      return tmp;
    }
    for (int i = 0; i < srcLen + 1; i++)
    {
      (*dest)[destLen + i] = src[i];
    }
    return *dest;
    }
    
    int main(int argc, char* argv[])
    {
    char a[SIZE] = "abcd";
    
    char * p = (char*)malloc(SIZE);
    memset(p, 0, 5);
    strcpy(p, a);
    
    cout << myStrcat(&p, "3367") << endl;;
    }
    
    
     
  • 相关阅读:
    转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
    转!!left join on and 与 left join on where的区别
    swoole WebSocket 消息推送
    基于swoole搭建聊天室程序
    使用php+swoole对client数据实时更新(下)
    使用php+swoole对client数据实时更新(上)
    swoole实现websocket推送
    PHP只显示姓名首尾字符,隐藏中间字符并用*替换
    微信小程序 tp5上传图片
    thinkphp 调用wsdl接口实例化SoapClient抛出异常
  • 原文地址:https://www.cnblogs.com/yuguangyuan/p/5848221.html
Copyright © 2020-2023  润新知