李奉典 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日

悬赏问题

  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像