试图找到正确的方法,但似乎无法在任何地方找到正确的语法..
我想要做的就是将局部变量的值复制到指针中,所以我可以在任何地方使用该指针。否则,当方法返回时,该指针的值将是不可预测的。继承人我拥有但似乎仍然只是引用局部变量的地址
void method(){
unsigned int localValue = 0x00FF00AA;
unsigned int *point = (unsigned int *) 0x00000000;
*point = localValue;
}
但是这段代码只是出错了。有没有办法做到这一点?
答案 0 :(得分:1)
编程接收信号SIGSEGV,分段故障。
在C代码中,分段错误通常是由于错误而发生的 指针使用。取消引用空指针总是会导致分段错误,但是野指针和悬空指针指向可能存在或不存在的内存,可能是也可能不是可读写的,因此可能导致短暂的错误。
line 8 *point = localValue;
这里将您的本地值分配给导致SIGSEGV的指针。
试试这个。
#include <stdio.h>
void method(){
unsigned int localValue = 0x00FF00AA;
unsigned int *point = &localValue;
printf("%p\n", *point); //this just debug code
}
int main(void) {
method();
return 0;
}
答案 1 :(得分:0)
它会出现故障,因为你试图通过NULL指针写入。
您可以使用&amp; -operator直接为指针指定要使用的整数的地址。
unsigned int localValue = 0x00FF00AA;
unsigned int *point = &localValue;
编辑:在下面真正有用的评论之后,我注意到我的第一句话可能是错的,即使它只是一个小细节,也会让它听起来如此。你要做的是不写入NULL指针,但取消引用它,以便写入它指向的(不存在的)对象。
答案 2 :(得分:0)
point = (unsigned int*) localValue;
变量&#34; point&#34; (作为指针)设置为变量&#34; localValue&#34;。的值 为此,建议使用类型转换,以告诉编译器此无符号整数值现在是无符号整数的地址。接受评论的输入:演员是必需的。
如果您稍后使用指针,请小心 确保整数值是您真正想要使用的内存部分的地址;特别是在写作时 例如,它可能是微控制器上可写入的存储器映射外设寄存器。