在c / c ++中混淆指向结构的指针

时间:2012-04-26 22:26:49

标签: 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;
}

3 个答案:

答案 0 :(得分:8)

void test::dh()
{
    a d; <--
    d.s=1;
    d.b=2;
    d.h="ffdf";
    f=&d; <--
}

您正在创建一个本地对象d,然后将f设置为此对象的地址。一旦函数结束,对象就会超出范围而你会留下一个悬空指针。

答案 1 :(得分:4)

您最大的问题是,在dh()返回时,d不再在范围内。而不是a d;中的dh(),而是f = new a(); f.s=1; f.b=2, f.h="ffdf";

答案 2 :(得分:2)

在test :: dh中,为公共指针f指定d的地址,这是一个局部变量。当g.dh();退出时,d的地址不再有效,这就是g.dt();中对f的引用失败的原因。