#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p, i;
p = (int *)malloc(6 * sizeof(int)) ;
p++;
free(p); //此处报错误,原因是:对p做p++和一般的int *自加没有区别 都是指针移动sizeof(int)的值,但是 除非你保存了原始的p值 或者可以通过计 // 算找回p的原始值(malloc的返回值),否则这段内存无法释放,如果加上free(p),就会报错
p=NULL;
return 0;
}
注意:p是一个指针
对p做p++和一般的int *自加没有区别 都是指针移动sizeof(int)的值,但是 除非你保存了原始的p值 或者可以通过计算找回p的原始值(malloc的返回值),否则这段内存无法释放,如果加上free(p),就会报错
如下面,就正确:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p, i;
p = (int *)malloc(6 * sizeof(int)) ;
*p=5;
printf("%2d", *p);
free(p);
p=NULL;
return 0;
}