考虑以下代码:
int main()
{
int *a,address,size;
a= (int *) malloc(10);
address=(int*) a-1;
size=(int ) *(a-1); // sorry there was a bug wrong casting, now its corrected.
printf("address of malloc n:%d\n",address);
printf("size of malloc block b:%d\n",size);
printf("before%p",a);
a=a+1;
printf("\n after%p",a);
free(a);
getch();
}
malloc“a”的地址递增,然后释放(a + 1)。 它会导致内存泄漏,但是如果它必须释放,那么自由将如何知道终点,以便它不会错误地释放下一块内存? Char Array中是否有任何结束标记 - '\\ 0'?
我在K&R第8章第8.7节中读到免费维护一个列表,免费知道的列表是将空闲内存块添加回来。
malloc声明的表是否有任何大小? 那么上面的代码将如何工作,我猜这是免费列表来图片对吗? 它只是添加自由链表,即只有单词+ 1。 并忘记导致内存泄漏的其他内存位置。
但是当你做一个malloc()时,我读到它返回一个指针-1并给出分配的malloc块的大小,我是对的吗?
任何人都可以详细解释这个吗?
问题与代码无关。 它的Malloc和免费功能如何相互配合。 如果我说自由(a),自由函数究竟将如何知道块的结尾?