c++ - 从 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 *
,而不是它来自一个int *
或其他类型的任何信息。
推荐阅读
- hash - 使用带有和不带有 -n 的 echo 打印不同的哈希值
- r - 重命名r中数据框中多个列的多个值(按文件名重命名文件号)
- ios - tableView 与在代码中创建 UI 元素的优势?
- sql - 基于一位数字的 SQL 替换值
- python - 烧瓶,让表单更新雪花表而不刷新页面
- python - 如何在执行熊猫时传递多个参数/参数
- json - Alamofire 响应处理程序的问题
- web - 下载交互式网站以供离线使用
- typescript - 如何通过 git hook 脚本运行 jest?
- reporting-services - 在 SSRS 中使用 IIF 和 DATEPART 在日期列中突出显示月份的第一天