【发布时间】:2012-10-11 17:40:54
【问题描述】:
我有一些内存,我尝试将它分成几部分。 所以我有一个链表。每个节点都跟踪分配的内存块的大小和下一个节点。
当我将指针返回给请求者时,我会在该节点结束后立即返回一个指针(比如 return newNode + sizeOf(node)),因为请求者只需要使用内存。
问题是当我尝试通过更改节点来释放它时。当使用指针调用 myFree 并且我执行指针 - sizeOf(node) 以到达节点时,它不起作用。
我做错了什么?
我认为它没有用,但这里有一些代码:
#define HEADER(24)
printf("Original pointer %-10p\n", pointer);
head *toUse = pointer + HEADER;
printf("Pointer to memory to be used %-10p\n", toUse);
printf("Trying to read the header again %-10p\n", toUse - HEADER);
第一个和第三个 printf 给了我不同的地址。这就是问题所在。
至于测试,我一开始只分配了一块内存,还是不行。
【问题讨论】:
-
如果你在几个块中分配,你的块可能不相邻,所以pointer-sizeof(node)不一定会把你放在前一个节点的开头。
-
我认为这不是有效的 C,
#define是错误的。 -
@Mat:不是,
HEADER和(24)之间需要一个空格。 -
你不懂指针运算。
pointer + HEADER和toUse - HEADER会根据 toUse 和指针的类型有不同的结果。显示定义这些类型的代码。