1.出问题的行 *p++ = i;
2.直接看代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p;
p = (int *)malloc(100 * sizeof(int));
if(p==NULL){
exit(1);
}
for(int i=0; i<25; i++) {
p[i] = i; //这里如果用指针赋值就出错 *p++ = i;
}
printf("p[0] is=%d\n", *p);
printf("p[24] is=%d\n", *p+24);
free(p);
return 0;
}
2.错误描述
munmap_chunk(): invalid pointer:
参见此处free函数文档。即如果
free(ptr)
函数中参数ptr
不是之前用calloc
、malloc
, 或realloc
分配内存返回的地址,或者ptr
是已释放的空间,就是一个未定义的行为,一般会导致内存错误。而*p++ = i;
显然对p
进行了修改,即free(p);
时的p
值不是malloc
时的值,所以会导致内存错误。当修改分配的指针时,应该先做好备份,以便在最后能正确释放。
此外
printf("p[24] is=%d\n", *p+24);
中p[24]
应该是*(p+24)
,注意运算符的优先级,*p+24
等价于p[0] + 24
。