与 C/C++ 中指向结构的指针混淆

Confusion with pointer to structure in c/c++

本文关键字:结构 指针 C++      更新时间:2023-10-16

我试图消除指向类中用作成员的结构的指针的一些混淆。我写了以下代码,但即使程序编译它也会崩溃。你能说出我在下面的代码中做错了什么吗?

#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 的引用失败的原因。