C ++指针赋值错误

时间:2016-01-03 22:18:49

标签: c++

我有两个类和主要的测试用例:

class Mytest{
private:
    int var;
public:
    Mytest(int);
};

inline Mytest::Mytest(int a){var=a;}

class ControlClass{
private:
    Mytest* m;
public:
    void f();
};

int main (void)
{
    ControlClass controlobject;
    controlobject.f();
    return 0;
}

void ControlClass::f(){
    Mytest w(5);
    Mytest* c=&w;
    m[0]=*c;// crash line
}

最后一行让我崩溃,我不知道为什么。 请帮帮我

1 个答案:

答案 0 :(得分:4)

您没有为成员指针分配内存

Mytest* m;

它只是一个未初始化的指针,并且像这里一样解除引用

m[0]=*c;// crash line

导致未定义的行为(例如导致崩溃)。

您需要为m分配一些内存,这里有一些选项

void ControlClass::f(){
    Mytest w(5);
    Mytest* c=&w;
    m = new MyTest(); // Don't forget to delete in the destructor 
                      // or whenever the resource isn't needed anymore
    m[0]=*c;
}
void ControlClass::f(){
    Mytest w(5);
    Mytest* c=&w;
    static Mytest x;
    m = &x; 
    m[0]=*c;
}