无效的空指针 - C ++ - VS2010

时间:2011-04-06 22:20:08

标签: c++ pointers map null

我收到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)));
    }

1 个答案:

答案 0 :(得分:1)

基于崩溃发生在名为assign的函数中的事实,我怀疑MyClass(直接或间接)包含指针成员但您尚未定义赋值运算符(和可能既不是复制构造函数也不是析构函数。事实上,你写了

  

它不会让我创建非指针的新对象,错误:没有运算符“=”匹配这些操作数。

如果您尝试像这样创建对象

MyClass myObject = MyClass(myMap);

上述编译器错误确实意味着找不到合适的赋值运算符来将MyClass(myMap)创建的临时值分配给myObject。在这种情况下,

MyClass myObject(myMap);

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

如果没有看到您正在调用的构造函数的实际代码,则无法准确说明崩溃发生的原因。