Нарушение прав доступа члена объекта указателя

Итак, я пишу эту клиент-серверную программу. Этот код со стороны клиента. У клиента есть экземпляр объекта

mpqs_sieve *instance_;

Причина, по которой я делаю это указателем, заключается в том, что mpqs_sieve имеет только конструктор, который принимает 3 аргумента, и я хочу создать его экземпляр позже.

Сначала клиент получает некоторые данные с сервера и использует их для создания экземпляра instance_. После этого он запросит еще какие-то данные, и получив их (это три коэффициента для квадратичного многочлена), он должен установить их в объекте instance_. Однако при вызове функции-члена instance_ я получаю нарушение прав доступа к одному из членов instance_ в рамках этого вызова функции.

Я разместил свой код здесь: в 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);
        // ...
    }
};

Любые идеи, чтобы решить эту проблему?


person Martin Lauridsen    schedule 26.04.2010    source источник
comment
Вы должны опубликовать соответствующий код здесь.   -  person    schedule 26.04.2010


Ответы (2)


Вы передаете копию указателя instance_ на функцию, а не ссылку на переменную. Когда вы назначаете instance_, вы изменяете локальную переменную, а не переменную-член с тем же именем.

Измените параметр функции на mpqs_sieve *&instance_.

person avakar    schedule 26.04.2010

Примечание о ссылках на переменные в существующем ответе является хорошим моментом, и я вижу еще одну потенциальную проблему:

Если я правильно понимаю ваш код, объект создается в функции set_mpqs_data() в строке 48. Вы уверены, что функция set_mpqs_data() вызывается до этого времени (обрабатывается сообщение MPQS_DATA)? В противном случае instance_ может не указывать на реальный объект, когда вы вызываете set_polynomial_data().

person WildCrustacean    schedule 26.04.2010
comment
Привет. Да, я думал об этом =) - person Martin Lauridsen; 26.04.2010