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");
}
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
?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With