Segmentation Fault error
Please support our C++ advertiser: Programming Forums
![]() |
•
•
Posts: 25
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?
•
•
Posts: 25
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
Thank you so much that fixed it. I have one more question though. The loop after that section where I am writing to the file. When the program finishes, and I looked at the file, it has one line with just the first line of the original file in it. From the program you can probably see what I want it to do, which is just append pretty much one more line of info to the file, even though the way I have it set up to do it is rewrite the whole thing line by line.
Any help on this?
•
•
Posts: 55
Reputation:
Solved Threads: 11
No problem, and try this:
You were closing the file with each iteration.
Nick
cplusplus 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
Other Threads in the C++ Forum
- 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
•
•
•
•
Views: 293 | Replies: 3 | Currently Viewing: 1 (0 members and 1 guests)





Linear Mode