我读了一个单元测试,检查无效免费或双免费:
int main() {
char *a = (char*) my_malloc(200);
char *b = (char*) my_malloc(50);
char *c = (char*) my_malloc(200);
char *p = (char*) my_malloc(3000);
(void) a, (void) c;
memcpy(p, b - 200, 450);
my_free(p + 200);
printstatistics();
}
为什么我们需要将char*
转换为void
以及当我们执行此演员时会在内存中发生什么?
答案 0 :(得分:5)
(void) a, (void) c;
是摆脱有关未使用变量的编译器警告的常用方法。由于这两个变量只是初始化而后不再使用,因此大多数编译器会发出有关它的警告。由于这显然是某种内存分配测试,因此不会故意使用,所以有人决定将警告静音。