私のプログラムはデッキからカードをランダムに引き出し、リンクされたリストの配列に保存します。スーツごとに 1 つのリストがあり、リストにはランクが保持されます。
struct node{
node(int value = 0) {data=value; next = NULL; }
int data;
node *next;
};
class list{
public:
list ();
~list();
bool empty() const {return N == 0;}
bool full() const {return false;}
int size() const {return N;}
void resize(int);
void clear();
void insert(int);
void remove(int);
void pop_back() { remove(N-1);}
const int & back();
int & operator[](int);
int findNodeRank(int);
friend ostream& operator<<(ostream &out, list);
private:
int N;
node *head;
node *findnode(int);
};
list::list() {
cout << "making list" << endl;
head = new node;
cout << "made list" <<endl;
}
私の主な機能にはこれらの行があります
cout << "here 1" << endl;
list deck[4];
cout << "not here 1";
コードをコンパイルして実行すると、次の出力が得られます。
here 1
making list
made list
making list
made list
making list
made list
making list
made list
not here 1
before loopHere;
insert
after find node rank
before find node
after find node
[1] 11472 segmentation fault (core dumped) ./Prog2b
ご覧のとおり、 not here が呼び出されることはないため、リスト配列の作成から抜け出すことはありません。何がうまくいかないのかわかりません。
OK ive は、この関数に絞り込みました。関連するすべてのコードを投稿しようとします
if (i == 0){
node *p = new node(rankIndex);
cout << "before find node" << endl;
node *pp = findnode(N);
cout << "after find node" << endl;
p->next = pp->next;
pp->next = p;
N++;
}else {
prev->next = match->next;
match->next = head->next; .
head->next = match;
}
}
int list::findNodeRank(int rankIndex){ //Function similar to findnode that checks for rank match. Returns the index of the match.
if (head->next == 0)
return 0;
node *p = head->next;
int i = 1;
cout << "find node rank function" << endl;
while(p->data != 0){
if (p->data == rankIndex)
return i;
p = p->next;
i++;
}
return 0; //Returns 0 if there is no match
}
inline
node *list::findnode(int i) {
if (i == -1)
return head;
node *p = head->next;
while(i--)
p = p->next;
return p;
}
まだ作成されていないノードなどを参照している可能性があります。これらのリンクされたリストが苦手です。基本的に、私が言ったようなプログラムはランダムなカードを引き、作成したこれらのリストに結果を保存します。挿入関数は、カードが描画されていない場合、リストの最後にカードを追加することになっています。カードが引かれた場合、リストの先頭に移動するはずです。何か案は??