李奉典 2023-02-02 23:14 采纳率: 96.3%
浏览 21
已结题

指针地址改变后如何正确 free掉这个指针?

  1. 图上这样写会崩溃,
    当指针地址改变后,free( )里要怎么写呀?

img

  1. 上图第八行,
    两个1024之间的号,代表乘法,100后面的代表(分节符)
    分节符这个称呼正确吗,该怎么理解100后面的*呢?

3.如果一个
int类型指针=malloc( 100sizeof(int类型说明符) )
这时候还能写1024

  1. 图上的void p
    void指针名=malloc( 数字
    sizeof(void类型说明符) )
    为什么不按照这种模式来写?

为什么写成纯数字形式 10241024 不用写明白这1mb要存什么类型?
原因是不能传递类型吗??不能传递类型的话,我们要强制类型转换吧,如p=(void
)malloc(10010241024);

  • 写回答

3条回答 默认 最新

  • Eliot5566 2023-02-02 23:28
    关注

    第八行中的1024后面的*可以理解为把1024当作数字进行运算,结果就是1024 * 100。

    当指针地址改变后,正确的free()写法是free(改变前的指针地址)。例如:

    c
    Copy code
    int *p = malloc(100 * sizeof(int));
    int *p2 = p;
    p = p + 50;
    free(p2);
    可以这样写:

    int *p = malloc(1024 * 1024 * sizeof(int));
    因为malloc()返回的是void类型的指针,所以可以直接用void指针接收返回值:
    
    void *p = malloc(1024 * 1024);
    写成纯数字形式1024 * 1024不需要写明白这1 MB要存什么类型,因为malloc()函数只分配内存,不管存储的是什么类型的数据。
    

    如果需要强制类型转换,可以这样写:

    void *p = (void *)malloc(100 * 1024 * 1024);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月12日
  • 已采纳回答 2月4日
  • 创建了问题 2月2日

悬赏问题

  • ¥15 爬取1-112页所有帖子的标题但是12页后要登录后才能 我使用selenium模拟登录 账号密码输入后 会报错 不知道怎么弄了
  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点