访问违反指针对象的成员

时间:2010-04-26 11:32:47

标签: c++ pointers access-violation

所以我正在编写这个客户端/服务器程序。此代码来自客户端。客户端有一个对象的实例

mpqs_sieve *instance_;

我将它作为指针的原因是,mpqs_sieve只有一个带有3个参数的构造函数,我想在以后的某个时间实例化它。

客户端首先从服务器获取一些数据,并使用它来实例化instance_。在此之后,它将请求更多数据,并且在接收到这些(这是二次多项式的三个系数)时,它应该在instance_对象中设置它们。但是,在调用instance_的成员函数时,我在该函数调用中的instance_成员之一上获得访问冲突。

我在这里发布了我的代码:on pastebin,我在第100行收到错误。调用来自第71行,在第21行之前。这是一段摘录:

class client_protocol {
public:
    static std::string parse_message(
        network_message& msg, mpqs_sieve *instance_)
    {
        // ...
        return set_mpqs_data(m.substr(i+1), instance_);
    }

private:
    static std::string set_mpqs_data(
        std::string data, mpqs_sieve *instance_)
    {
        instance_ = new mpqs_sieve(n, M, FB_count);
        // ...
    }
};

有什么想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您正在将instance_指针的副本传递给函数,而不是对变量的引用。当您分配给instance_时,您正在修改局部变量,而不是具有相同名称的成员变量。

将函数参数更改为mpqs_sieve *&instance_

答案 1 :(得分:0)

关于现有答案中对变量的引用的说明是一个很好的观点,我看到另一个潜在的问题:

如果我正确理解你的代码,那么该对象将在第48行的set_mpqs_data()函数中创建。你确定在此之前调用了set_mpqs_data()函数(正在处理MPQS_DATA消息)吗?否则,当您调用set_polynomial_data()时,instance_可能不会指向真实对象。