バッグデータ構造を作成しましたが、文字列の同じインスタンスが挿入されるたびにカウンタをインクリメントしようとしていますが、何らかの理由でカウンタがインクリメントされません。入力された同じ文字列の提案?バッグデータ構造のインクリメントカウンタ
struct BagNode
{
string dataValue;
int dataCount;
BagNode * next;
};
class Bag{
private:
BagNode * head;
public:
Bag()
{
head = NULL;
//curr = NULL;
}
void insert(string v)
{
if(head == NULL){ //empty list
head = new BagNode;
head->dataValue = v;
head->next = NULL;
}
else
{
BagNode * n = new BagNode; // new node
n->dataValue = v;
n->dataCount = 0;
BagNode * current = head; //for traversal
//current = head;
if(isSame(current->dataValue,v))
{
n->dataCount+= 1;
}
else
{
if(!isBefore(current->dataValue, v)) //new head
{
n->next = head;
head = n;
}
else{ //mid and tail insert
while(current->next && isBefore(current->next->dataValue,v))
{
current = current->next;
}
n->next = current->next;
current->next = n;
}
}
}
}
bool isSame(string a, string b)
{
transform(a.begin(), a.end(), a.begin(), ::tolower);
transform(b.begin(), b.end(), b.begin(), ::tolower);
if(a == b) {
return true;
}
else {
return false;
}
}
void traverse()
{
BagNode * current;
current = head;
while(current)
{
output << current->dataValue << " (" << current->dataCount << ")" << " ";
current = current->next;
}
cout << endl;
}
ここでは、デバッガを使用して一度に1行ずつコードをステップ実行したときに、どのような観察をしましたか?見つけたいバグと、メモリリークを引き起こすバグの2つがあります。 –
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
@SamVarshavchik私はあなたにメモリリークがどこにあるのか尋ねるかもしれません – FastKid12