簡単に言えば、このプログラムは、文字列から文字のリンクされたリストを作成することです。("HELLO" から head->h->e->l->l->o->NULL と言う) 消去機能を使用してヘッドを削除しようとすると、プログラムが動作を停止し、"application.exe" が表示されます。動作を停止しました... Windows が解決策を確認しています..". メモリの割り当てに問題があると思いますが、実際にはわかりません。提案は大歓迎です。
これは機能します
void StringADT::append(string s)
{
for (int i = 0; i < s.length(); i++)
{
Node* NodePtr;
Node* newNode;
newNode = new Node;
newNode->data = s.at(i);
newNode->next = NULL;
if (!head)
{
head = newNode;
} else
{
NodePtr = head;
while (NodePtr->next)
{
NodePtr = NodePtr->next;
}
NodePtr->next = newNode;
}
}
}
void StringADT::erase(int pos) //pos = position to erase
{
if (!head || pos < 0 || pos > length() - 1)
return;
else {
Node* NodePtr;
NodePtr = head;
if (pos == 0)
{
NodePtr = head->next;
delete head; //PROBLEM COMES AFTER EXECUTION OF THIS LINE!!
}
}
}
ここに私のクラスがあります
class StringADT{
private:
struct Node {
char data;
Node* next;
};
Node* head;
ここに、メモリ割り当てのために問題の原因となる可能性のある追加機能があります。
void StringADT::append(string s) (appending string s to the linked list)
{
Node* NodePtr;
int slength = s.length();
Node *NodeArray;
NodeArray = new Node[slength];
if(!NodeArray)
return;
for (unsigned i = 0; i < s.length(); i++)
{
NodeArray[i].data = s.at(i);
NodeArray[i].next = NULL;
}
if (!head)
{
head = NodeArray;
NodePtr = head;
for(unsigned count = 1; count < slength; count ++)
{
NodePtr->next = (NodeArray + count);
NodePtr = NodePtr->next;
//cout << "number of count " << count << endl;
}
} else {
NodePtr = head;
while (NodePtr->next)
{
NodePtr = NodePtr->next;
}
for(unsigned count = 0; count < slength; count ++)
{
NodePtr->next = (NodeArray + count);
NodePtr = NodePtr->next;
//cout << "number of count " << count << endl;
}
}
}