Неверный нулевой указатель - C ++ - VS2010 - PullRequest
0 голосов
/ 07 апреля 2011

Я получаю Assertion failed сообщение об ошибке Expression: invalid null pointer, которое указывает на c:\program files\microsoft visual studio 10.0\vc\include\xstring line:930.

Вот мой код:

void main(void)
    {
    // fillMap() fills map with data from txtfile and returns map<char,int> 
    map<char, int> myMap = fillMap("file.txt");   // <- takes a string

    MyClass *myObject;
    // Code reaches here fine
    myObject= new MyClass(myMap);    // this line causes the error
    // Does not get to here
    }

В строке, которая вызывает ошибки, я могу оставить конструктор () пустым и просто сказать ptr = new MyClass(); и все равно получить ту же ошибку. Я думаю, это как-то связано с моим конструктором.

В MyClass определение конструктора - MyClass(char=' ', int=0). Если я не даю им значения, я получаю ошибку No default constructor.

Итак, кто-то может сказать мне, как я могу отследить эту ошибку в Visual Studio 2010, или предоставить возможное решение, почему я получаю эти проблемы?

PS, это не позволит мне создавать новые объекты, которые не являются указателями, Error: No operator "=" matches these operands.

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: Если это поможет, вот строка 930 из xstring:

_Myt& assign(const _Elem *_Ptr)
    {   // assign [_Ptr, <null>)
    _DEBUG_POINTER(_Ptr);      //930
    return (assign(_Ptr, _Traits::length(_Ptr)));
    }

1 Ответ

1 голос
/ 07 апреля 2011

Исходя из того, что сбой происходит в функции с именем assign, я подозреваю, что MyClass (прямо или косвенно) содержит член-указатель, но вы не определили оператор присваивания (и, возможно, ни копию конструктор и деструктор) правильно. На самом деле, вы пишете

это не позволит мне создавать новые объекты, которые не являются указателями. Ошибка: Нет оператора "=" соответствует этим операндам.

Если вы пытались создать свой объект следующим образом

MyClass myObject = MyClass(myMap);

вышеприведенная ошибка компилятора действительно означает, что не найден подходящий оператор присваивания для назначения временного файла, созданного MyClass(myMap), myObject В этом случае

MyClass myObject(myMap);

должен скомпилироваться (хотя, вероятно, он все равно потерпит крах).

Не видя фактического кода вызываемого вами конструктора, невозможно точно сказать, почему происходит сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...