动态内存管理和常用工具函数

本文介绍C/C++中动态内存管理的基本概念,包括使用malloc和free进行内存分配与释放的方法,以及如何避免内存泄漏。同时,文章列举了几种常用的内存管理工具函数如calloc、realloc等,并简单提及字符串操作和内存处理函数。
//堆区通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值