使用带变量指针的free

时间:2016-02-17 16:19:17

标签: c pointers memory-management malloc free

来自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);

感谢。

1 个答案:

答案 0 :(得分:1)

如果尝试free修改(增加)指针,您将有内存泄漏(失败malloc)或损坏free链。