| | |
Segmentation Fault error
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: May 2008
Posts: 33
Reputation:
Solved Threads: 0
C++ Syntax (Toggle Plain Text)
#include <iostream> #include <fstream> #include <vector> #include <string> #include <sstream> #include <stdio.h> #include <time.h> using namespace std; bool StringToInt(const string &s, int &i); int main() { // opening up and setting up the input file stream so we can read it // to perform the "account info" and the "history" parts of the program. // the inserting part will be done later. ifstream logFileIn; logFileIn.open("logfile.txt"); // store each line of the logfile into an array where each element // of the array is each line of the text file. vector<string> each_Line; ifstream ifs( "logfile.txt" ); string temp; while( getline( ifs, temp ) ) { each_Line.push_back( temp ); } //closing file so we can open later to write to it logFileIn.close(); int numLines = each_Line.size(); // storing the account holders # in another array and then removing // dupes. vector<string> account_Numbers(numLines); int i; for (i=0;i<numLines-1;i++) { account_Numbers[i] = each_Line[i].substr(0,4); } // storing the peoples names in another array in the same positions // as the previous array of their account #'s. vector<string> account_Names(numLines); int j; for (j=0;j<numLines-1;j++) { account_Names[j] = each_Line[j].erase(0,5); int colonPos = account_Names[j].find(":",0); account_Names[j] = account_Names[j].substr(0,colonPos); } // now doing the same thing with a date array. vector<string> account_Dates(numLines); for (int k=0;k<numLines-1;k++) { account_Dates[k] = each_Line[k].erase(0,5); int colonPos2 = account_Dates[k].find(":",0); account_Dates[k] = account_Dates[k].substr(colonPos2+1,8); } // once again but for the type of transaction. vector<string> account_Tran(numLines); for (int l=0;l<numLines-1;l++) { account_Tran[l] = each_Line[l]; int colonPos3 = account_Tran[l].rfind(":",(account_Tran[l].length()-1)); account_Tran[l] = account_Tran[l].substr(colonPos3-1,1); } // and finally an array for the amount. vector<string> amount(numLines); for (int m=0;m<numLines-1;m++) { amount[m] = each_Line[m]; int finalColon = amount[m].rfind(":",(amount[m].length()-1)); amount[m] = amount[m].substr(finalColon+1,10); } //** Here is where the user will select from one of three menus. cout << endl; cout << "Please enter either 'i' for Account Info, 'h' for History, or 't' to Insert a Transaction: " << endl; string choice; cin >> choice; //***** Account Info Menu *****// if (choice == "i") { //display list of names for (int numNames=0;numNames<numLines-1;numNames++) { cout << numNames+1 << ". " << account_Names[numNames] << endl; } //allow user to select a certain person by entering there number, or q //to exit cout << endl; cout << "Select a person by entering the number next to their name, or enter '0' to quit" << endl; int nameChoice; cin >> nameChoice; if (nameChoice == 0) { cout << endl; cout << "Thank you for using this program."; } else { cout << endl; cout << "Account #: " << account_Numbers[nameChoice-1] << endl; cout << "Name: " << account_Names[nameChoice-1] << endl; int balance; for (int a=0;a<numLines-1;a++) { if (account_Names[a] == account_Names[nameChoice-1]) { int tempconvert; if (account_Tran[a] == "D") { if (StringToInt(amount[a],tempconvert)) { } balance = balance + tempconvert; } else if (account_Tran[a] == "W") { if (StringToInt(amount[a],tempconvert)) { } tempconvert = tempconvert * (-1); balance = balance + tempconvert; } } } cout << "Balance: $" << balance << endl << endl; cout << "Thank you and please use this program again." << endl; } } //***** History Menu *****// else if (choice == "h") { //display list of names for (int numNames2=0;numNames2<numLines-1;numNames2++) { cout << numNames2+1 << ". " << account_Names[numNames2] << endl; } //allow user to select a certain person by entering there number, or q to exit cout << endl; cout << "Select a person by entering the number next to their name, or enter '0' to quit" << endl; int nameChoice2; cin >> nameChoice2; if (nameChoice2 == 0) { cout << endl; cout << "Thank you for using this program."; } else { for (int b=0;b<numLines-1;b++) { if (account_Names[b] == account_Names[nameChoice2-1]) { cout << account_Dates[b] << " " << account_Tran[b] << " $" << amount[b] << endl; } } } } //***** Insert a Transaction Menu *****// else if (choice == "t") { //display list of names for (int numNames3=0;numNames3<numLines-1;numNames3++) { cout << numNames3+1 << ". " << account_Names[numNames3] << endl; } //user select a person or now a new option to create a new account. cout << endl; cout << "Select the # next to the person whos account you want to add a transaction to or enter 'add' if you want to add a new account." << endl; string nameChoice3; cin >> nameChoice3; if (nameChoice3 == "add") { cout << endl << "Please enter the name of the account holder that you want to add(no spaces please): "; string newAccount; cin >> newAccount; account_Names[numLines] = newAccount; cout << endl << "Please enter the 4 digit account # of the account you would like to create: "; string newAccountNum; cin >> newAccountNum; account_Numbers[numLines] = newAccountNum; cout << endl << "Please enter the type of transaction ('D' or 'W'): "; string newAccountTran; cin >> newAccountTran; account_Tran[numLines] = newAccountTran; cout << endl << "Please enter the amount (without $ sign) of the transaction: "; string newTranAmount; cin >> newTranAmount; amount[numLines] = newTranAmount; cout << endl << "What is todays date? (YY/MM/DD): "; string newDate; cin >> newDate; account_Dates[numLines] = newDate; ofstream logFileOut; logFileOut.open ("logfile.txt"); for (int write=0;write<account_Names.size();write++) { logFileOut << account_Numbers[write] << ":" << account_Names[write] << ":" << account_Dates[write] << ":" << account_Tran[write] << ":" << amount[write] << "\n"; logFileOut.close(); } } } // if they did not enter a correct option. else { cout << "You did not enter a correct choice. The program will now exit. Please run it again and enter correctly." << endl; } } bool StringToInt(const string &s, int &i) { istringstream myStream(s); if (myStream>>i) return true; else return false; }
The segmentation fault error occurs I think in the block of code from line 200-203. It might occur beyond that as well but I haven't been able to find out because it won't get past the previous part.
Any help?
•
•
Join Date: May 2008
Posts: 33
Reputation:
Solved Threads: 0
•
•
•
•
The problem is with line 203. You're trying the assign the value ofnewAccountto memory outside the bounds of the vector's array. Useaccount_Names.push_back(newAccount)instead, and it should reallocate the memory for you.
Nick
Any help on this?
•
•
Join Date: Aug 2008
Posts: 83
Reputation:
Solved Threads: 18
No problem, and try this:
You were closing the file with each iteration.
Nick
C++ Syntax (Toggle Plain Text)
logFileOut.open ("logfile.txt"); for (int write=0;write<account_Names.size();write++) { logFileOut << account_Numbers[write] << ":" << account_Names[write] << ":" << account_Dates[write] << ":" << account_Tran[write] << ":" << amount[write] << "\n"; } logFileOut.close();
Nick
![]() |
Similar Threads
- Segmentation Fault error (C)
- Segmentation fault in C++ (C++)
- Segmentation fault (Python)
- help on 'Segmentation Fault' (C)
- segmentation fault (C)
- Access Violation (Segmentation Fault) + atol (C++)
- unix/C++ segmentation fault (C++)
Other Threads in the C++ Forum
- Previous Thread: Need help in finding correct method for my program!
- Next Thread: Please help me understanding implementing this class
| Thread Tools | Search this Thread |
api array arrays based beginner binary c++ c/c++ calculator char char* class classes code compile compiler console conversion count delete deploy desktop directshow dll download dynamic dynamiccharacterarray encryption error file forms fstream function functions game givemetehcodez google graph gui homeworkhelp homeworkhelper iamthwee ifstream input int integer java lib linkedlist linker linux list loop looping loops map math matrix memory news numbertoword output parameter pointer problem program programming project proxy python random read recursion recursive reference return rpg sorting string strings struct temperature template templates test text text-file tree unix url variable vector video visual visualstudio win32 windows winsock wordfrequency wxwidgets





