与 C/C++ 中指向结构的指针混淆
Confusion with pointer to structure in c/c++
我试图消除指向类中用作成员的结构的指针的一些混淆。我写了以下代码,但即使程序编译它也会崩溃。你能说出我在下面的代码中做错了什么吗?
#include<stdio.h>
#include<string.h>
struct a{
int s;
int b;
char*h;
};
class test
{
public:
a * f;
void dh();
void dt();
};
void test::dh()
{
a d;
d.s=1;
d.b=2;
d.h="ffdf";
f=&d;
}
void test::dt()
{
printf("%s %d %d",f->h,f->b,f->s);
}
int main()
{
test g;
g.dh();
g.dt();
return 0;
}
void test::dh()
{
a d; <--
d.s=1;
d.b=2;
d.h="ffdf";
f=&d; <--
}
您正在创建一个本地对象 d
,然后将f
设置为该对象的地址。函数结束后,对象将超出范围,您只剩下一个悬空的指针。
你最大的问题是,当dh()
返回时,d
不再在范围内。与其a d;
dh()
,不如f = new a(); f.s=1; f.b=2, f.h="ffdf";
。
在 test::d h 中,将公共指针 f 分配给 d 的地址,这是一个局部变量。当 g.dh();
退出时,d 的地址不再有效,这就是 g.dt();
中对 f 的引用失败的原因。
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- C++:映射结构中的结构指针
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 类的静态结构指针声明在C++
- 在两个.cpp文件之间定义全局类/结构指针
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 如何在地图中使用结构指针
- 结构指针在"新"调用上给出已分配的地址?
- 铸造结构指针指向C 的工会指针
- c++ 结构指针在初始化为 NULL 时无法读取内存
- 函数中的结构指针的地址为0x1
- C 用结构指针初始化结构
- C 结构指针铸成数组Interop C#
- 方法中不允许访问结构指针
- 如何打印出结构指针
- MPI_Op_create:候选功能不可行.自定义结构指针不能解释为空指针
- 尝试将结构指针传递给类时出错
- 初始化结构指针的值
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?