来自cplusplus.com:
先前通过调用malloc,calloc或realloc分配的内存块已取消分配,使其再次可用于进一步分配。
如果ptr没有指向使用上述函数分配的内存块,则会导致未定义的行为。
如果ptr是空指针,则该函数不执行任何操作。
请注意,此函数不会更改ptr本身的值,因此它仍指向相同(现在无效)的位置。
但是如果我的指针没有指向块的开头会发生什么。
例如:
int *ptr = malloc(sizeof(int)*10);
ptr++;
free(ptr);
免费只释放最后9个职位吗?在这种情况下,这将是可怕的,然后:
int *ptr = malloc(sizeof(int)*10);
int i;
for(i=0; i<10; i++, ptr++);
free(ptr);
这里ptr指向malloc保留的内存块之外。
这会是什么行为?
int *ptr1 = malloc(sizeof(int)*10);
int *ptr2 = ptr1 + 2;
free(ptr2);
感谢。
答案 0 :(得分:1)
如果尝试free
修改(增加)指针,您将有内存泄漏(失败malloc
)或损坏free
链。