2011-04-06 239 views
0

我得到一個Assertion failed錯誤,指出Expression: invalid null pointer,它指向c:\program files\microsoft visual studio 10.0\vc\include\xstring line:930空指針無效 - C++ - VS2010

這裏是我的代碼:

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))); 
    } 
+2

你可以發佈該構造函數的代碼嗎? – Mat 2011-04-06 22:22:20

+2

'(char,int)'構造函數不是您要調用的構造函數。有沒有一個構造函數需要'map '? – aschepler 2011-04-06 22:24:30

回答

1

基礎上認爲,墜機發生在一個名爲assign功能,我懷疑是MyClass(直接或間接)包含一個指向一個事實成員,但您尚未正確定義賦值運算符(也可能不是複製構造函數和析構函數)。事實上,你寫

it won't let me create new objects that aren't pointers, Error: No operator "=" matches these operands.

如果你想創建你的對象是這樣

MyClass myObject = MyClass(myMap); 

上述編譯器錯誤確實意味着沒有合適的賦值運算符找到指定由MyClass(myMap)創建臨時myObject。在這種情況下,

MyClass myObject(myMap); 

應該編譯(雖然它可能會以相同的方式崩潰)。

沒有看到您正在調用的構造函數的實際代碼,無法準確說明崩潰發生的原因。

+0

在語句MyClass myObject = MyClass(myMap)中沒有賦值;' – Cubbi 2011-04-06 22:58:07

+0

嗨,謝謝。這是構造函數本身的一個問題。我愚蠢地使用同一個名字來處理不同類型的2個對象!一個在Class中被指定爲private,另一個在構造器中被聲明,所以編譯器變得混亂了!我很愚蠢!和secnodly,我在構造函數中初始化一個字符串爲NULL,它不喜歡!我現在正在運行,沒有錯誤。再次感謝! – eoinzy 2011-04-07 00:47:28