我收到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
。
感谢您的帮助。
编辑:如果有帮助,这里是xstring的第930行:
_Myt& assign(const _Elem *_Ptr)
{ // assign [_Ptr, <null>)
_DEBUG_POINTER(_Ptr); //930
return (assign(_Ptr, _Traits::length(_Ptr)));
}
答案 0 :(得分:1)
基于崩溃发生在名为assign
的函数中的事实,我怀疑MyClass
(直接或间接)包含指针成员但您尚未定义赋值运算符(和可能既不是复制构造函数也不是析构函数。事实上,你写了
它不会让我创建非指针的新对象,错误:没有运算符“=”匹配这些操作数。
如果您尝试像这样创建对象
MyClass myObject = MyClass(myMap);
上述编译器错误确实意味着找不到合适的赋值运算符来将MyClass(myMap)
创建的临时值分配给myObject
。在这种情况下,
MyClass myObject(myMap);
应该编译(尽管它可能会以相同的方式崩溃)。
如果没有看到您正在调用的构造函数的实际代码,则无法准确说明崩溃发生的原因。