This portion of my code (for this project) gives me a segmentation fault. The source code is available here.
void PackageManager::install_package(string pname)
{
if(repository->exists_package(pname)) {
Package *pkg;
ConcretePackage *cpkg;
MetaPackage *mpkg;
if(repository->is_virtual(pname)) {
//code for dealing with meta packages
mpkg = new MetaPackage(pname);
pkg = mpkg;
system->operator+(pname);
} else {
//code for dealing with concrete packages
cpkg = new ConcretePackage(pname);
pkg = cpkg;
system->operator+(pname);
if( cpkg->getDependencies().size() > 0) {
for(set<string>::iterator sit = pkg->getDependencies().begin();
sit!=pkg->getDependencies().end(); ++sit) {
cout<<*sit<<endl;
system->operator+(*sit);
}
}
}
} else {
cout<<"Invalid Package Name"<<endl;
}
}
Here is the error when I run gdb and also the backtrace.
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b6db03 in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
from /usr/lib/libstdc++.so.6
(gdb) backtrace
#0 0x00007ffff7b6db03 in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
from /usr/lib/libstdc++.so.6
#1 0x00000000004052e8 in PackageManager::install_package (this=0x7fffffffe280, pname=...) at packagemanager.cpp:39
#2 0x000000000040575a in main () at packagemanager.cpp:79
I'm trying to iterate through a set and perform some operation. I can pode more code if needed. I would also like it if someone could guide me to a place where I could learn to understand these segfaults. I don't know much about them and I tend to panic when I encounter these.
This is the operator+ for the System class.
void System::operator+(string pname)
{
installed_packages.insert(pname);
log.push_back("Added " + pname);
}
I know the design isn't the best but I'm trying to implement the items of a checklist for this project, which covers various areas of Object Oriented Programming. The checklist is also available on github.
I have tried to run the code through the debugger, printng out *sit. It works for sometime and then crashes. I don't know too much about gdb.