//堆区通过malloc和free申请内存和释放
//指针p1离开作用域之后, 这个指针本身就死亡了, 但是指针所指的那块空间还在, 所以要记得free
//否则就是内存泄漏
int main(){
int* p1=(int*)malloc(4);//p1自己是在栈区,指向一块堆区空间
free(p1);//谁申请,谁释放
}
// 堆区按内存地址由低到高方向生长,其大小由系统内存/虚拟内存上限决定
// #include<stdlib.h>
// 包含free,realloc
//malloc以字节为单位申请空间,返回void*
void *malloc(size_t size);
//申请num个大小为size字节的空间,(num*size),并将分配得到的所有字节为0
void* calloc(size_t num, size_t size);
void test_free(){
int *p = NULL;
printf("%p\n",p);//(nil)
p = (int *)malloc(8);
printf("%p\n",p);//(0x1a07010),%p十六进制前面会有0x
free(p);
printf("%p\n",p);//(0x1a07010)
//free之后会是null吗,不会,值和malloc之后的一样,所以,free之后还要手动置为null
//不能对malloc的返回值多次free
}
常用工具函数
//字符串/数字转换
atoi(字符串转为整数int)//等价于strtol(nptr, NULL, 10)
atol(字符串转为整数long)
atoll(字符串转为整数long long)
atof(字符串转为double)//等价于strtod(nptr, NULL)
void test_strtol(){
//base为0时,strtol就自己识别判断16|8|10进制
long a = strtol("0x12",0,0);//18,将字符串中的数字识别为了16进制
long b = strtol("012",0,0);//10,将字符串中的数字识别为了8进制
long c = strtol("12",0,0);//12
//base为2,将字符串中的数字识别为2进制,在第一个不是有效数字(给定base)的字符停止
long d = strtol("12",0,2);//1, 2不是2进制中的有效数字,在这停止
long e = strtol("17",0,2);//1, 7不是2进制中的有效数字,在这停止
long f = strtol("107",0,2);//2, 7不是2进制中的有效数字,在这停止
long g = strtol("x17",0,2);//0, x不是2进制中的有效数字,在这停止
printf("%d,%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f,g);
}
//检测是否为小写字符,是否空白字符等等
//内存区域
memset(buf,value,n)//将buf的前n个字节,设置值为value
memcmp(buf1,buf2,n)//比较前n个字节
memcpy(dest,src,n)//将src的前n个字节复制到dest
https://en.cppreference.com/w/c/language/storage_duration
https://en.cppreference.com/w/c/language/extern
https://en.cppreference.com/w/c/language/translation_phases
https://en.cppreference.com/w/c/language/initialization#Empty_initialization
https://en.cppreference.com/w/c/language/object
https://en.cppreference.com/w/c/memory
https://en.cppreference.com/w/c/memory/realloc
https://sourceware.org/glibc/manual/
https://sourceware.org/glibc/wiki/MallocInternals
https://www.man7.org/linux/man-pages/man1/make.1.html
https://en.cppreference.com/w/c/memory/calloc
https://www.man7.org/linux/man-pages/man3/major.3.html
https://www.man7.org/linux/man-pages/man2/brk.2.html
https://www.man7.org/linux/man-pages/man3/malloc.3.html
https://en.cppreference.com/w/c/memory/free
本文介绍C/C++中动态内存管理的基本概念,包括使用malloc和free进行内存分配与释放的方法,以及如何避免内存泄漏。同时,文章列举了几种常用的内存管理工具函数如calloc、realloc等,并简单提及字符串操作和内存处理函数。

被折叠的 条评论
为什么被折叠?



