我的代碼的這一部分(對於this project)給了我一個分段錯誤。源代碼可用here。在C++中迭代std :: set <std::string>時出現分段錯誤
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;
}
}
這是我運行gdb和回溯時的錯誤。
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
我想遍歷一組並執行一些操作。如果需要,我可以推送更多的代碼。 如果有人能指導我到一個能夠學會理解這些段錯誤的地方,我還會喜歡它。我對他們瞭解不多,當我遇到這些時我傾向於恐慌。
這是System類的operator +。
void System::operator+(string pname)
{
installed_packages.insert(pname);
log.push_back("Added " + pname);
}
我知道這個設計是不是最好的,但我想實現一個清單的這個項目,它涵蓋面向對象編程的各個領域的項目。該清單也可在github上獲得。
我試圖通過調試器運行代碼,printng out * sit。它有一段時間,然後崩潰。我不太瞭解gdb。
什麼是'system-> operator +()'? – Drahakar
@GregHewgill從我在堆棧跟蹤中可以看到的錯誤來自'Packaged :: :: install_package'在'std :: ostream'的'operator <<'中。看起來像是在for循環中。 – Drahakar
@GregHewgill:我在github上添加了我的回購鏈接。 – nikhil