假设有20个内存块,指针p指向第一个块.现在,当我这样做时:
p++;
free(p);
Run Code Online (Sandbox Code Playgroud)
将释放多少块内存,为什么?
Sou*_*osh 25
非确定性.不能说.您需要提供返回的确切指针malloc().
传递[和family] free()未返回的指针malloc()是未定义的行为.
根据你的问题,如果malloc()-ed指针存储在p了,你p++和打电话free(p);,那么就p没有了指针由归国的calloc,malloc或realloc功能.
根据第7.20.3.2章,c99标准,第2段
free函数导致ptr指向的空间被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.否则,如果参数与之前由calloc,malloc或realloc函数返回的指针不匹配,或者如果通过调用free或realloc释放了空间,则行为未定义.
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |