gpt4 book ai didi

c - 指针 + int 与点 - int

转载 作者:行者123 更新时间:2023-11-30 14:23:28 25 4
gpt4 key购买 nike

我有一些内存,我尝试将其分成几 block 分配。所以我有一个链接列表。每个节点都会跟踪分配的内存块的大小以及下一个节点的大小。

当我将指针返回给请求者时,我会在该节点结束后立即返回一个指针(例如返回 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 给了我不同的地址。这就是问题所在。

测试的话,我一开始就分配了一 block 内存,还是不行。

最佳答案

在 C 中,(pointer + n) 相当于 &pointer[n] ...也就是说,索引计算的是指针指向的项,而不是字节。如果您想要字节偏移量,请使用 ((char*)pointer + n)。但在你的情况下,你不需要字节偏移量;而不是

return newNode + sizeof(node);

你可以这样做

return newNode + 1;

return &newNode[1];

尽管如果您返回一个指向调用者可以用作任何类型的指针,您可能希望将它们转换为 (void*) 。要从 (void*) 指针返回到原始节点,请使用 (node*)vp - 1(node*)((char* )vp - sizeof(节点))

另外,

#define HEADER(24)

不会编译,因为它类似于类似函数的宏;宏名称和左括号之间至少需要一个空格(或省略括号)。

关于c - 指针 + int 与点 - int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com