user2330291
user2330291

Reputation: 61

Segmentation Fault (core dumped) C++

After researching I do believe I understand what the "Segmentation fault" error is. However, even after commenting out the code line by line, I can not seem to find where the fault is occurring in order to fix it. Is there something I am overlooking that is causing this error? Below is what shows up when I run the code:

Ready to play (y/n)? y

3C AH 4C 3H 4H 2H 5H 2C 5C AC

Here's your cards: 3C AH 4C 3H 4H

Segmentation fault (core dumped)

Pasted below is the code that I am referring to. The commented out parts were just me trying to find where the error was occurring:

#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <ctime>
#include <cstdlib>
#include <string>
#include <cstring>
#include <stdio.h>
using namespace std;

vector<string> bigDeck;
vector<string> cardDeck;
vector<string> playerHand;
vector<string> computerhand;
vector<string> shortvec;

const int DEAL_CARDS = 5;


void ResetDeck();
void Shuffle();
void DealACard();
void DealQCard();
void DealBCard();
string CStr(int);
int letsee2;

int main()
{


cout << "Ready to play (y/n)? ";

char yn;
cin >> yn;
if (yn == 'n' || yn != 'y') return 0;

ResetDeck();

srand(time(0));

Shuffle();

for (int f=0; f < 10; f++)
{
        cout << cardDeck[f] << " ";
}


cout << "\n\nHere's your cards: ";
for (int i=0; i < DEAL_CARDS; i++)
{
        DealACard();
        cout << playerHand[i] << " ";
}

cout<<"\n\nHere's the Computer's cards: ";
for (int k=0; k < DEAL_CARDS; k++)
{
        DealBCard();
        cout << computerhand[k] << " ";
}

for (int u=0; u < DEAL_CARDS; u++)
{
        DealQCard();
}

cout<<shortvec.size()<<endl;

cout<<endl<<endl;

//do
//{

for (int woh=0; woh < DEAL_CARDS; woh++)
{
 if ((playerHand[woh][0]=='A') && (computerhand[woh][0]=='A'))
        {
                cout<<"War!"<<endl;


        }
        else if ((playerHand[woh][0]=='A') && (computerhand[woh][0]!='A'))
        {
                cout<<"Player wins"<<endl;
                /*playerHand.push_back(computerhand[woh]);
                computerhand.erase(computerhand.begin()+(woh-1));*/
        }
        else if ((playerHand[woh][0]!='A') && (computerhand[woh][0]=='A'))
        {
                cout<<"Computer Wins"<<endl;
                /*computerhand.push_baci(playerHand[woh]);
                playerHand.erase(playerHand.begin()+(woh-1));*/
        }
        else
        {
                if ((atoi(playerHand[woh].c_str())) > (atoi(computerhand[woh].c_str())))
                {
                        cout<<"Player wins!"<<endl;
                        /*playerHand.push_back(computerhand[woh]);
                        computerhand.erase(computerhand.begin()+(woh-1));*/
                }
                else if ((atoi(playerHand[woh].c_str())) < (atoi(computerhand[woh].c_str())))
                {
                        cout<<"Computer wins!"<<endl;
                        /*computerhand.push_back(playerHand[woh]);
                        playerHand.erase(playerHand.begin()+(woh-1));*/
                }
                else
                {
                        cout<<"War!"<<endl;

                }
        }
/*if (playerHand.size() > computerhand.size())
        shortvec = computerhand;
else
        shortvec = playerHand;

cout<<endl<<endl;
*/
}
/*for (int z=0; z < playerHand.size(); z++)
{
        cout << playerHand[z] << " ";
}

cout<<"\n\nHere's the Computer's cards: ";
for (int y=0; y < computerhand.size(); y++)
{
        cout << computerhand[y] << " ";
}*/

cout<<endl<<endl;
//}
//while(((playerHand.size())!=10) || (computerhand.size())!=10);

return 0;
}
void Shuffle()
{
        random_shuffle(cardDeck.begin(),cardDeck.end());
}

void DealBCard()
{
        computerhand.push_back(cardDeck[0]);
        cardDeck.erase(cardDeck.begin());
}

void DealACard()
{
        playerHand.push_back(cardDeck[0]);
        cardDeck.erase(cardDeck.begin());
}

void DealQCard()
{
        shortvec.push_back(bigDeck[0]);
        bigDeck.erase(bigDeck.begin());
}

string CStr(int n)
{
        stringstream s;
        s << n;
        return s.str();
}

void ResetDeck()
{
        cardDeck.clear();
        playerHand.clear();
        computerhand.clear();

        for (int i=2; i<6; ++i)
        {
                cardDeck.push_back(CStr(i) + "H");
                cardDeck.push_back(CStr(i) + "C");
        }
        cardDeck.push_back("AH");
        cardDeck.push_back("AC");
}

Upvotes: 5

Views: 78676

Answers (2)

Sohail xIN3N
Sohail xIN3N

Reputation: 3041

Trying to access non-existent memory or memory which is being used by other process also causes the Segmentation Fault (core dumped).

Core dumped means that the program state has been recorded, i.e, its resources that were in memory and processor.

Upvotes: 4

Joseph Mansfield
Joseph Mansfield

Reputation: 110658

You have a std::vector called bigDeck and in DealQCard you attempt to access its 0th element, despite the fact it has no elements. Did you mean to put some cards in bigDeck?

Upvotes: 7

Related Questions