首页 > 代码库 > malloc calloc realloc
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 5char* 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;;}
malloc calloc realloc
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。