Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.02.2016
Сообщений: 1
1

Segfault

27.02.2016, 14:14. Показов 519. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть задачи - нужно внутри очереди расположить карты случайным образом. Но вылезает сегфолт после добавления в очередь 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
Может, кто-что заметит и чем поможет?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2016, 14:14
Ответы с готовыми решениями:

std::max segfault
Программа пытается найти максимально больше слово в векторе. Не пойму в чём дело: #include...

Segfault на ровном месте
Доброго времени суток. Пишу достаточно простую программку под Linux. Вот кусок кода в котором...

Segfault при прасинге файла
С++ знаю плоховато. Решил написать себе генератор to-do list`a, вроде даже начало было неплохим, но...

SegFault при вводе стрококвого поля структуры
struct vuz { char name; int yearOfOpening; int numberOfFaculties; int...

0
27.02.2016, 14:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2016, 14:14
Помогаю со студенческими работами здесь

GC+SEGFAULT
Всем трям. Вопрос продвинутым. Посещаю курсы по Питону и задали нам хитрое задание - сделать...

Segfault at 0 .error
1. Debian 8 64bit 2. Все, что нашла lib32 загружены 3. Гугл не помог Та же сборка стояла на...

Segfault после WriteProcessMemory
#include &lt;windows.h&gt; #include &lt;string&gt; using namespace std; int main() { string s =...

Большой массив данных и segfault
Есть струтура ( порядка 4 uint32_t + 8 байт char ) Нужно хранить 32000 таких структур постоянно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru