【问题标题】:Invalid Null pointer - C++ - VS2010无效的空指针 - C++ - VS2010
【发布时间】:2011-04-06 22:20:08
【问题描述】:

我收到一个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
    }

在导致错误的那一行,我可以将constructor() 留空,然后说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)));
    }

【问题讨论】:

  • 你能把那个构造函数的代码贴出来吗?
  • (char,int) 构造函数不是您调用的那个。有没有接受map&lt;char,int&gt; 的构造函数?

标签: c++ pointers map null


【解决方案1】:

基于崩溃发生在名为assign 的函数中的事实,我怀疑MyClass(直接或间接)包含一个指针成员,但您尚未定义赋值运算符(可能也没有定义副本构造函数和析构函数)正确。其实你写

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

如果你尝试像这样创建你的对象

MyClass myObject = MyClass(myMap);

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

MyClass myObject(myMap);

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

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

【讨论】:

  • 语句MyClass myObject = MyClass(myMap);中没有赋值
  • 嗨,谢谢。这是构造函数本身的问题。我愚蠢地为两个不同类型的对象使用了相同的名称!一个在类中指定为私有,另一个在构造函数中声明,所以编译器很困惑!我太傻了!其次,我在构造函数中将一个字符串初始化为 NULL,它不喜欢!我现在运行它没有错误。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多