Dynamic Memory Check (DMC) 动态内存检测
动态内存检测,既在程序运行的时候检测内存的越界,野指针,空指针等问题,可以提高软件的安全性与稳定性。使用宏实现,所以对性能的消耗不大。能够解决rust解决了C语言的问题。
使用守则
所有属于DMC的内容都是以$符号开头的。
每个DMA函数都只能写在单独的一行
DMA函数末尾可以不用加;分隔符
API主要分为3类
一、基础型:处理内存分配与释放
$define(type, name)
指针变量的定义,并初始化为NULL
例:
$define(char *, p) // 相当于char *p = NULL;
$malloc(name, size)
为name指针分配新的内存空间,会检测name的值,如果name不是NULL则抛出提示。然后分配一个新的内存地址给name。 相当于name = malloc(size);
例:
$malloc(p, 32) // 为p分配一个32字节大小的内存
$free(name)
释放name指针的内存地址,首先会检测指针的值,如果为NULL则抛出提示,释放内存后会将指针置NULL,避免野指针问题。相当于free(name);
例:
$free(p) // 将p指向的地址释放
二、悬挂型:处理悬挂指针问题(返回了函数内部的局部变量)
$$
表明需要对该函数进行悬挂指针检测,必须放在函数的开头,$$把{符号替代了。
例&