2017-07-20 7 views
-1
Homework 2(11785,0x100082000) malloc: *** error for object  
enter code here0x73203a296b636f6c: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 
d c b a (lldb) 

このエラーは、デバッガでコードをステップ実行した場合には発生しませんが、問題の原因を見つけるのに苦労します。また、プログラムを実行するたびに発生することはありませんが、コードをまったく変更しない場合でも時々発生します。これは、main、b = aの代入演算子を呼び出すときにのみ発生します。ランタイムmalloc:***エラーは時々発生するだけです

#include <iostream> 
#include <string> 
using namespace std; 

typedef string ItemType; 


class LinkedList { 

private: 
struct Node { 
    ItemType value; 
    Node *next; 
}; 
Node *head; 
int m_size; 

public: 

// default constructor 
LinkedList() : head(nullptr) { 
    m_size = 0; 
} 

// copy constructor 
LinkedList(const LinkedList& rhs){ 
    head = nullptr; 
    Node *p = nullptr; 
    for (Node* n = rhs.head; n != nullptr; n = n->next) 
    { 
     Node* newNode = new Node; 
     newNode->value = n->value; 
     if (p != nullptr) 
      p->next = newNode; 
     if (head == nullptr) 
      head = newNode; 
     p = newNode; 
    } 
    m_size = rhs.m_size; 
} 

// Destroys all the dynamically allocated memory 
// in the list. 
~LinkedList(){ 
    Node* n = head; 
    Node* prev = nullptr; 
    while (n != nullptr) { 
     prev = n; 
     n = n->next; 
     delete prev; 
    } 
} 


// assignment operator 
const LinkedList& operator=(const LinkedList& rhs){ 
    LinkedList *copy = new LinkedList (rhs); 
    head = copy->head; 
    m_size = copy->m_size; 
    return *this; 
} 

// Inserts val at the front of the list 
void insertToFront(const ItemType &val){ 
    Node* currentHead = head; 
    head = new Node; 
    head->value = val; 
    head->next = currentHead; 
    m_size++; 
} 

// Prints the LinkedList 
void printList() const{ 
    Node* n = head; 
    while (n != nullptr) 
    { 
     cout << n->value; 
     n = n->next; 
    } 
} 

int main(){ 
LinkedList a; 
a.insertToFront(" a "); 
a.insertToFront(" b "); 
a.insertToFront(" c "); 
a.insertToFront(" d "); 
a.printList(); 
LinkedList b; 
b = a; 
return 0; 
} 
+2

スタックオーバーフローをデバッガと混同しないでください。彼らはあなたがどこを見るかを知っていれば詳細な報告をします。 – tadman

+0

私はあなたが何を言っているのか理解していますが、運が悪いので、何時間も問題を掘り下げようとしました。あなたがコードからかなり明白に分かるように、これは宿題であり、このエラーは、私が期日が近づいているはるかに大きな課題の残りを終えることを妨げています。初心者として、私はこの難しいハードルを克服するために誰かが私を助けてくれることを望んでいたので、残りのコードを続けます。 – NickR

+0

@NickR、Linuxには、メモリデバッガー、Valgrindがあります。 'valgrind。/ your_program'で試してみると、多くのメモリ管理エラーが検出されます。あるいは、メモリを割り当てて解放するすべての場所で、 'stderr'(または' std :: cerr'に '' '')にデバッグ 'fprintf'sを追加してみてください。あなたはnew-edでないものに対してdeleteを呼び出すことはできません。 – osgx

答えて

-1

エラーは文字通りpointer being freed was not allocatedです。 C++でポインタを解放するとは、ポインタ上でdelete演算子を使用していることを意味します。それはあなたに答えを与えることなくあなたを助けるはずです。

あなたが特に宿題をしているときは、これらの質問を自分で試してみてください。誰かにあなたの問題を解決させてもらうことはできません。

smart pointersで自動メモリ管理を検討してください。

幸運のベスト。

関連する問題