指针地址改变后如何正确 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);

第八行中的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);

p改变之前,先用另一个指针q记录下它的值,改变p之后free(q)

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^