Суть задачи - нужно внутри очереди расположить карты случайным образом. Но вылезает сегфолт после добавления в очередь 8 карт. Увеличил уже лимит стека на unlimited, сегфолт не пропал. Рекурсий нет, ругается на функцию добавления в очередь.
Вот тут мэйн:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
| #include <iostream>
#include "queue.h"
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
Queue<string> deck(52);
int i = 0;
int numOfCards = 1;
int cardValue;
int suit;
string card;
string queueElem;
bool bln;
int arr[52];
srand(time(NULL));
while (numOfCards < 52) {
bln = true;
cardValue = 2 + rand() % 13;
suit = rand() % 4;
if (cardValue <= 9){
card = cardValue + '0';
arr[i] = cardValue;
} else {
if(cardValue == 11) {
card = "Jack";
} else {
if(cardValue == 12){
card = "Queen";
} else {
if(cardValue == 13) {
card = "King";
} else {
if(cardValue == 14) {
card = "Ace";
} else {
if(cardValue == 10) {
card = "10";
}
}
}
}
}
}
card += " of ";
switch(suit){
case 0:
card += "Hearts";
break;
case 1:
card += "Diamonds";
break;
case 2:
card += "Clubs";
break;
case 3:
card += "Spades";
break;
}
// deck.printQueue();
if(numOfCards > 1){
for(int ax=0; ax<numOfCards; ax++) {
queueElem = deck.dequeue();
if (card == queueElem) {
bln = false;
cout << "FALSE - " << card << endl;
ax--;
}
//deck.printQueue();
deck.enqueue(queueElem);
}
i += 1;
cout <<i << "\n";
deck.printQueue();
if(bln == true) {
deck.enqueue(card);
numOfCards += 1;
}
} else {
numOfCards += 1;
deck.enqueue(card);
}
}
} |
|
А тут головарь:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
| #ifndef QUEUE_H
#define QUEUE_H
#include<cassert>
#include <iostream>
using namespace std;
template<typename T>
class Queue
{
public:
Queue(int = 10);
Queue(const Queue<T> &);
~Queue();
void enqueue(const T &); //add an element to queue
T dequeue(); //delete an element from queue
void printQueue();
T peek();
protected:
private:
T *queuePtr; //указатель на очередь
const int size;
int begin, end;
int elemCT; //счетчик элементов
};
template<typename T>
Queue<T>::Queue(int sizeQueue): size(sizeQueue), begin(0), end(0), elemCT(0){
queuePtr = new T[size + 1];
}
template<typename T>
Queue<T>::Queue(const Queue &otherQueue):size(otherQueue.size), begin(otherQueue.begin), end(otherQueue.end), elemCT(otherQueue.elemCT), queuePtr(new T[size+1]){
for(int ix=0; ix < size; ix++){
queuePtr[ix] = otherQueue.queuePtr[ix]; //копирование самой очереди
}
}
template<typename T>
Queue<T>::~Queue(){
delete [] queuePtr;
}
template<typename T>
void Queue<T>::enqueue(const T &newElem){
assert(elemCT < size);
queuePtr[end++] = newElem;
elemCT++;
}
template<typename T>
T Queue<T>::dequeue(){
assert(elemCT > 0);
T returnValue = queuePtr[begin++];
elemCT--;
if (begin > size) {
begin -= size + 1;
}
return returnValue;
}
template<typename T>
void Queue<T>::printQueue(){
cout<<"Очередь: ";
if(end == 0 && begin == 0){
cout<<"пустая.\n";
} else {
for(int ix = end; ix >= begin; ix--) {
cout<<queuePtr[ix]<<" ";
}
cout<<endl;
}
}
template<typename T>
T Queue<T>::peek(){
return queuePtr[begin];
}
#endif // QUEUE_H |
|
Может, кто-что заметит и чем поможет?