当调用malloc时,大小存储在已分配的块附近,以便free可以知道要释放多少等等(http://c-faq.com/malloc/freesize.html).
我的问题是,假设我们已经动态分配了内存,稍后在代码中我们增加了指针
pointer++
Run Code Online (Sandbox Code Playgroud)
然后,如果我打电话给
free(pointer)
Run Code Online (Sandbox Code Playgroud)
实际上释放了什么内存.
它是从"指针"指向的当前地址开始分配的字节数,还是从已分配的基址开始的.
Ale*_*ler 28
您需要与free()收到的指针相同的指针malloc().增量,改变或改变它是未定义的行为,通常是一个分段错误.
将您从图书馆收到的指针想象成一本书.你回家看看吧.之后,您将删除首页和书籍的背面并将其交还给图书管理员.他会接受它还是你现在遇到严重的麻烦?;-)
Alo*_*hal 11
你只能调用free()上之前从获得的值malloc(),calloc()或realloc()(和NULL).其他一切都未定义.
例如,实现可能会在返回地址之前将所分配块的大小存储在4个字节中malloc().然后,free()返回4个字节并找出大小.如果您不将原始指针传递回,则无效free().
| 归档时间: |
|
| 查看次数: |
4108 次 |
| 最近记录: |