带指针铸造的局部变量

问题描述:

我遇到的一个问题是试图将变量转换到内存中,以便稍后访问。带指针铸造的局部变量

我这里有一个例子代码,完美的作品:

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; 
+2

你想在这里做什么? 'label =(unsigned int *)0xFFAAFFAA;'简单地覆盖指针本身。 –

+0

@OliverCharlesworth嗨奥利弗,织补。基本上所有我试图做的是创建一个新的无符号..执行一些逻辑,如减去和添加,然后将其值分配给一个指针 –

+0

,因为我似乎无法移位或做任何类型的这些操作一个无符号的int指针..所以我需要做一个正常的值,然后复制它 –

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

第一个示例的问题是您分配内存并将其地址分配给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