weixin_62375656 2021-11-08 12:36 采纳率: 55.6%
浏览 205
已结题

【提问】多次使用malloc函数的内存分配问题。

刚刚学到malloc,然后试着写了串代码看看重复对p用malloc,malloc的地址和程序运行的结果是什么。

#include<stdio.h>
#include<stdlib.h>
int main()
{
         int* p=0;
         p = (int*)malloc(1024 * 1024 * 100); 
         printf("%p\n", p);
         while (p != NULL)
         {
             p = (int*)malloc(1024 * 1024 * 100);
             printf("%p\n", p);
         }
    printf("%p\n", p);
}

img

p的地址一直增大直到超出分配空间会返回0这我知道。

疑惑的是:p的地址一直增大是不是因为重复做malloc之前没有free?

不理解的是:每行的p的地址都是首地址吗(我想毕竟它重新分配了,所以首地址也跟着重新变换了?)?如果是的话那之前分配过的没有free的空间去哪了?p还指向那些地方吗?

  • 写回答

2条回答 默认 最新

  • 关注

    每行的p的地址都是首地址,每次malloc后,由系统重新分配内存,所以p也会随着改变,直到没有内存可以分配(程序会崩溃)。
    没有free的空间还保留在程序中,但是因为已经让p指向了新申请的内存,所以先申请的内存已经丢失,无法再使用,这就会造成内存泄露。之前申请的那些内存空间,只会在程序结束的时候,由系统回收。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 修改了问题 11月8日
  • 创建了问题 11月8日

悬赏问题

  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测