首页 > 解决方案 > 从 malloc 类型更改指针类型并释放它。它会导致内存泄漏吗?

问题描述

我使用 malloc 分配指针类型使用的内存。然后我强行修改指针类型。使用 free func 释放内存块。我很想知道是否发生内存泄漏?

我认为 memroy 通过指针类型是免费的。"int *b" 比 "char *a" 有更广泛的内存块。我编译以下代码并运行它。没有期望发生。有人能告诉我发生了什么,为什么吗?

#include <stdlib.h>

int
main(int argc, char **argv) {
        char *a = (char*)malloc(sizeof(char));
        int *b = (int*)a;
        free(b);
}

标签: c++cmemorymallocfree

解决方案


家族中的例程malloc跟踪它们保留的所有内存,包括大小。当您将地址传递给free时,例程会在其记录中查找该地址并释放为其分配的空间量。

free只传递一个地址。它没有关于调用者用作参数的指针类型的信息。因为 free 被声明为void free(void *),任何传递给它的指针都会自动转换为void *,并且 free 只接收那个void *,而不是它来自一个int *或其他类型的任何信息。


推荐阅读