c语言 - 为什么"env"的地址在顺序函数调用中不同?


void env_create(uint8_t *binary, enum EnvType type){
struct Env *env = NULL;
int r = env_alloc(&env, 0); // &env = 0xf0117fcc
cprintf("env addr: %xn", &env); // &env = 0xf0117fbc
if(r != 0) panic("env_create:%e", r);
load_icode(env, binary); // &env = 0xf0117fcc
env->env_type = type;
}

当我使用 gdb 检查 "env" 的地址时,它总是0xf0117fcc,但调用 "env_alloc" 后 "env" 的正确值存储在 0xf0117fbc。我想知道什么可能导致问题?提前谢谢。

env 是一个自动变量。在大多数(如果不是全部(C++实现中,这是在堆栈上实现的。您只是获得了不同的堆栈位置。

最新更新