【发布时间】:2020-10-27 12:53:12
【问题描述】:
在我的带有 Cosmic 编译器的 STM8 Disco Board 上,我尝试了以下代码并期望 'ptr_a' 和 'ptr_aLocal' 相同:
int a, b, *ptr_a, *ptr_b;
void main()
{
int *ptr_aLocal;
a = 4;
b = 5;
ptr_a = &a;
ptr_b = &b;
ptr_aLocal = &a;
}
但是,“ptr_a”具有变量“a”的正确地址,而“ptr_aLocal”包含错误的地址。
使用 gcc 编译相同的代码时,'ptr_a' 和 'ptr_aLocal' 与预期相同。
在 main 中声明本地指针有什么问题?
感谢您的帮助。 拉斐尔
编辑:
现在我真的很困惑: 添加行时'ptr_b = ptr_aLocal;'在代码的末尾,ptr_b 显示了变量 'a' (0x106) 的正确地址,尽管 'ptr_aLocal' 仍然包含变量 a (0x108) 的错误地址
【问题讨论】:
-
您如何查看这些值?在检查值之前你确定最后一行已经执行了吗?
-
@Rafael 在此声明之后 ptr_aLocal = &a;放置此语句 printf("%d\n", ptr_a == ptr_aLocal );看看有没有输出1。
-
@Tordek:我正在使用 ST Visual Develops Debugger 查看值。运行 gcc exe 时,我使用 printf 输出值。是 ptr_aLocal = &a;已被执行。
-
@Vlad:当代码在STM8上运行时,printf应该输出到哪里?
-
您是否禁用了所有优化?该行可能不会做任何事情,因为它正在分配一个局部变量并立即退出。