c语言之内存管理(二)

时间:2020-12-09 01:32:05

内存泄漏几乎是很难避免的,会产生泄漏的内存,也就是说由malloc系列函数或new操作符分配的内存。如果用完之后没有及时free或delete,这块内存就无法释放,直至整个程序终止。
1)如何使用malloc函数
malloc函数的原型:
(void *)malloc(int size)
malloc函数的返回值是一个void 类型的指针,参数为int类型数据,即申请分配的内存大小,单位是字节。内存分配成功之后,malloc函数返回这块内存的首地址,你需要用一个指针来接受这个地址。由于malloc返回的是void *类型的,所以你必须要强制转换为你说接收的类型 
如char *p = (char *)malloc(100);
在堆上分配了100字节的内存,返回的是这块内存的首地址,把地址强制转化为char*类型后赋给char*类型的指针变量p,malloc不一定分配成功,因为malloc函数申请的是连续的一段内存
2)用malloc函数申请0字节内存
申请0字节内存,函数并不返回NULL,而是返回一个正常的内存地址,但是你无法使用这块大小为0的内存。这好尺子上的某个刻度,刻度本身并没有长度,只有某俩个刻度一起才能量出长度,对于这点还是要小心,因为这时候if(NULL != p)校验将不起作用。
3)内存释放
既然有分配,就必须有释放。不然的话,有限的内存会被用光,而没有释放的内存却在空闲,与malloc对应的函数就是free了,free函数的参数就是释放内存块的首地址free(p);
4)内存释放之后
释放指针变量p之后,就一定要把p=NULL;这个NULL就是之前我们所说的“栓野狗的狗链子”,否则很容易成为野指针。