函数内的内存地址
Memory address inside a function
MAIN
tst_struct *tst1;
printf("P outside function1: %p n", tst1); //Output: 0x0
tst_func(tst1);
功能
tst_struct *tst_func(tst_struct *tst1)
{
printf("P from param: %p n",tst1); // Output 0x0
tst_struct *tst2;
printf("P inside function: %p n", tst2); // Output 0x7ffeebcf8940
}
我不明白为什么会这样。
我在这两个功能中都做了同样的事情。
如果我创建一个变量并在 main 上检查地址,而不分配任何值,则结果0x0。
但是如果我在另一个函数中创建任何变量,我会收到一个地址。
主要功能和"正常"功能之间有一些区别吗?谢谢
未定义的行为。如果值为零,则您很幸运。您有一个未初始化的变量,并且想知道为什么它具有随机值?您可能会在 main 或调试版本中(倾向于将内存初始化为零(中得到零,也可能不会。它取决于编译器/操作系统/CPU,永远不应该被认为是理所当然的。它可以是任何东西,因为它是未定义的。
此处未定义的行为。
首先,我假设您已经包括了<stdio.h>
.
tst1
未初始化。如果您尝试打印该值,其中一种可能性是您会得到0x0
.但是,其他任何事情都可能发生。tst2
也是一样.
另一件事,当您在printf()
中使用%p
格式说明符时,要严格遵守,您需要提供void *
。因此,严格来说,您应该使用例如:
printf("P outside function1: %p n", (void *)tst1);
见 https://stackoverflow.com/a/24867850/10616174
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- CUDA:统一内存和指针地址的更改
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用内存地址访问结构的属性值
- 如何读取特定地址的进程内存?
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 将布局映射到内存地址
- 为什么同一个变量的内存地址不同?
- LLVM 传递以在特定地址分配内存
- 无法将内存地址转换为值
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 给定特定内存地址的数组的动态内存分配
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 获取 R 数据帧的内存地址
- 如何配置bazel以运行地址/内存清理器?
- 存储 std::list 元素的地址;内存
- 确定库的地址内存