将指针类型从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);
}
回答
系列中的例程会malloc跟踪它们保留的所有内存,包括大小。当您将地址传递给 时free,例程在其记录中查找地址并释放为其分配的空间量。
free只传递一个地址。它没有关于调用者用作参数的指针类型的信息。因为 free 被声明为void free(void *),所以任何传递给它的指针都会自动转换为void *,并且 free 只接收那个void *,而不是它来自 anint *或其他类型的任何信息。