3

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

#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;
}
4

3 回答 3

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

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

于 2012-04-26T22:28:20.043 回答
4

你最大的问题是,到了dh()回报的时候,d已经不在范围内了。而不是a d;in dh(),你需要f = new a(); f.s=1; f.b=2, f.h="ffdf";.

于 2012-04-26T22:29:39.460 回答
2

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

于 2012-04-26T22:31:44.043 回答