C++ 将局部变量从FuncA处理为FuncB时出现问题,不应返回
我在C++ 将局部变量从FuncA处理为FuncB时出现问题,不应返回,c++,c,embedded,C++,C,Embedded,我在funcB中创建了一个函数来更新funcA中的局部变量。但是,当funcB返回时,funcA中的局部变量值似乎与我在funcB中设置的值不一致 请参阅下面的代码片段: typedef enum { A =0, B, C, D, MAX } status_val; int funcA(){ status_val test = A; printf("before getvalue %d\n",test);
funcB
中创建了一个函数来更新funcA
中的局部变量。但是,当funcB
返回时,funcA
中的局部变量值似乎与我在funcB
中设置的值不一致
请参阅下面的代码片段:
typedef enum {
A =0,
B,
C,
D,
MAX
} status_val;
int funcA(){
status_val test = A;
printf("before getvalue %d\n",test); //<-- this prints 0
funcB((char*)&test);
printf("value of test=%d\n", test); //PROBLEM: this prints a very large number. ex. 67108864 in my actual project
}
void funcB(char* val){
*val = 10;
printf("val inside getvalue=%d\n", *val); //<-- this prints 10
}
输出(实际):
但在我在嵌入式系统中运行的实际代码中,
funcB
返回funcA
后的值似乎变为一个非常大的数字(67108864)。我现在很困惑:(.这似乎是一个堆栈问题。如果是,有人能指出一些可能的解决方法吗?TIA。funcB
需要一个char*
,但您传递的是状态值*
。枚举类型通常实现为int
,因此您使用的是不兼容的指针类型
更改funcB
以接受正确的类型:
void funcB(status_val *val){
突击测验:什么是
sizeof(status\u val)
,或者sizeof(test)
?提示:根据显示的代码,它不是1,因此您可以自己解决问题的其余部分。@SamVarshavchik谢谢您的回答,我打印了status\u val和test的大小。sizeof statusval=4 sizeof test=4那么,您希望如何通过char*
,因为char
的sizeof
是1?我相信这个问题对您来说是显而易见的,现在?奇怪的是,在一个在线编译器@SamVarshavchik上也有同样的工作,我得到的不是char而是char*。在funcA中,我在调用funcB-->funcB((char*)&test)时对char执行强制转换所以他们应该是compatible@cabrillosa它们不是。演员阵容是你对编译器撒谎并说它们是。我目前正在编译。但为什么问题只发生在我的power pc项目中,而不发生在其他编译器中?这是通过无效指针类型写入的结果。不一致就是一种表现。猜测您的power pc compiler使用默认的big-endian字节顺序funcB操作/破解MSB。因此您得到了较大的值。使用小endian修补LSB。
before getvalue 0
val inside getvalue=10
value of test=67108864
void funcB(status_val *val){