gpt4 book ai didi

检查并比较不同类型变量的内存地址

转载 作者:行者123 更新时间:2023-11-30 15:58:45 26 4
gpt4 key购买 nike

我正在尝试比较内存中两个变量的地址:

chunk_t *old_chunk, *new_chunk;

if(&(old_chunk + 1 + old_chunk->size) == &new_chunk) { }

这是 chunk_t 的原型(prototype):

typedef struct chunk_tag {
struct chunk_tag *next; /* next node in list */
int size; /* size of node in units, not bytes */
} chunk_t;

我的 if 语句中出现有关“需要左值作为一元 '&' 操作数”的编译器错误。

我认为这是因为我添加了一个 int old_chunk->size 和一个 chunk_t old_chunk,所以我在 if 语句中将 old_chunk->size 键入为 chunk_t,编译器告诉我“请求转换为非标量类型” ”

最佳答案

您不能获取计算值的地址。获取地址仅适用于已在堆栈上某处分配的值。

想象一下“将 12 加在一起得到的值的地址是什么?”没有地址,因为它是一个计算值。您需要有一个变量或一个计算的内存位置,以便能够直接操作内存。

从您的代码来看,您希望在不使用 & 的情况下进行地址检查:

if(old_chunk + 1 + old_chunk->size == new_chunk) { }

这是因为您的两个变量都是指向 chunk_t 对象的指针

只要确保您知道自己在做什么即可。将 1 添加到 old_chunk 意味着在内存中比 old_chunk 指向的位置晚查找 sizeof(chunk_t) 字节。相反,添加 old_chunk->size 意味着稍后查找 sizeof(chunk_t) * old_chunk->size 字节。

关于检查并比较不同类型变量的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9558558/

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