gpt4 book ai didi

c - 具有指针转换的局部变量

转载 作者:行者123 更新时间:2023-11-30 19:34:58 25 4
gpt4 key购买 nike

我遇到的问题之一是尝试将变量转换到内存中以便稍后访问。

我这里有一个完美运行的示例代码:

unsigned int *label = (unsigned int *)malloc(sizeof(unsigned int));
label = (unsigned int * ) 0xFFAAFFAA;

在我的代码中的任何其他位置,我都可以访问此值标签,当我尝试打印它时,它将指向 0xFFAAFFAA 作为其值。

但是,如果我尝试从这样的变量进行分配:

 //all of this is inside a method.. so any variables declared would be local
unsigned int localVariable = 0xFFFFFFFF;
unsigned int *label = (unsigned int *)malloc(sizeof(unsigned int));
label = &localVariable;

结果将是一些疯狂的东西,比如:0x7f252d6b5f00 ..我只是假设它是内存中的一些随机地址。我知道这个问题是由于局部变量造成的,因为它在函数内运行而不是全局的。但我不知道它的语法是什么......

我想定义局部变量的原因是因为函数中还有其他逻辑要从该变量中添加和减去。我将其保留以保持最小

编辑:所以我可以做这样的事情?

 unsigned int localVariable = 0xFFFFFFFF;
unsigned int *label = (unsigned int *)malloc(sizeof(unsigned int));
*label = localVariable;

最佳答案

听起来您想要的是在函数中创建一个指向变量的指针,然后在函数外部访问它。

第一个示例的问题是您分配内存并将其地址分配给label,但随后您覆盖了label的值,导致您丢失了对您刚刚分配的内存。您需要使用 * 运算符取消引用指针,以写入刚刚分配的内存地址。

第二个示例不起作用,因为您获取了局部变量的地址,然后当函数返回时该变量超出了范围。因此该地址无效。

下面的示例分配空间,取消引用刚刚分配的指针以写入给定地址,然后将地址返回给调用者。

unsigned int *func()
{
// allocate space (don't cast return value of malloc)
unsigned int *label = malloc(sizeof(unsigned int));
// dereference pointer and write value to allocated memory
*label = 0xFFAAFFAA;
// pass pointer to allocated memory to the calling function
return label;
}

请记住,调用函数将负责在使用完毕后返回的内存上调用free,以避免内存泄漏。

关于c - 具有指针转换的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43161484/

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