无效空指针- c++ - VS2010

Invalid Null pointer - C++ - VS2010

本文关键字:VS2010 c++ 无效 空指针      更新时间:2023-10-16

我得到一个Assertion failed错误,说明Expression: invalid null pointer,它指向c:program filesmicrosoft visual studio 10.0vcincludexstring 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

谢谢你的帮助。

编辑:如果有帮助的话,这里是xstring: 中的第930行
_Myt& assign(const _Elem *_Ptr)
    {   // assign [_Ptr, <null>)
    _DEBUG_POINTER(_Ptr);      //930
    return (assign(_Ptr, _Traits::length(_Ptr)));
    }

基于崩溃发生在名为assign的函数中的事实,我怀疑MyClass(直接或间接)包含指针成员,但您没有正确定义赋值操作符(可能既没有定义复制构造函数也没有定义析构函数)。事实上,你写

它不允许我创建非指针的新对象,错误:没有操作符"="匹配这些操作数

如果你想创建这样的对象

MyClass myObject = MyClass(myMap);

上面的编译错误确实意味着没有找到合适的赋值操作符来将MyClass(myMap)创建的临时变量赋值给myObject。在本例中,

MyClass myObject(myMap);

应该可以编译(尽管它可能以同样的方式崩溃)。

如果没有看到所调用的构造函数的实际代码,就不可能确切地说出崩溃发生的原因。