+ 2

Why i am getting segmentation fault for calling same function twice

this is the function here mp contains value and key string morseToWord(string input, map<string,string> mp, map<string,string>::iterator it) { input += " "; string decoded = "",a = ""; for(int i = 0; i < input.length(); i++) { if(input[i] != ' ' && input[i] != '/') { a += input[i]; } else if(input[i] == ' ') { it = mp.find(a); decoded += it->second; a = ""; } else if(input[i] == '/') decoded += " "; } return decoded; } it works perfectly fine when calling it once but gives segmentation fault every time i call the function twice in the main function.

4th Mar 2018, 5:38 PM
shobhit
shobhit - avatar
3 Answers
+ 2
A segmentation fault generally occurs when you try to access memory that is not allocated for you i.e outside the boundary of the current program. If you give a link to the full code, I can try to give some explanation for the same.
4th Mar 2018, 6:43 PM
Ravi Chandra Enaganti
Ravi Chandra Enaganti - avatar
+ 2
You should really pass references or pointers in your function parameters if you want to modify parameters inside the function. But I would need to see the whole code to know the problem.
4th Mar 2018, 6:46 PM
Karl T.
Karl T. - avatar
+ 1
the problem is the whole code is somewhat 100-200 lines long so i can't write it here. but it is like this. #include <iostream> #include <map> using namespace std; string morseToWord(string input, map<string,string> mp, map<string,string>::iterator it); int main() { map<string,string>key; map<string,string>::iterator it; key["A"] = "..-"; // and so on key["..-"] = "A"; // and so on till all the letters and same for morse code as well cout << morseToWord("-",key, it) <<endl; cout << morseToWord("-",key, it) <<endl; } string morseToWord(string input, map<string,string> mp, map<string,string>::iterator it) { input += " "; string decoded = "",a = ""; for(int i = 0; i < input.length(); i++) { if(input[i] != ' ' && input[i] != '/') { a += input[i]; } else if(input[i] == ' ') { it = mp.find(a); decoded += it->second; a = ""; } else if(input[i] == '/') decoded += " "; } return decoded; } *morse code in the code may be wrong, only purpose is to show logic
5th Mar 2018, 3:25 AM
shobhit
shobhit - avatar