Mam problem - piszę mini system kontroli wersji , w skrócie klasa Repository zawiera liste klas Revision, klasa Revision zawiera map<string, Patch*> który mapuje na nazwe pliku na patch.
Patch dziedziczy z File, File posiada vector<string> lines.
Tutaj wszystkie pliki, sory że w ten sposób , ale nie jestem w stanie odseparowć błedu od reszty kodu i zlokalizować gdzie powstaje:
main.cpp
file.h
repo.h
file.cpp
repo.cpp
revision.h
revision.cpp
LongestCommonSubsequence.hpp
Cała logika wydaję sie ok, zablokowałem copy constructor jako explicit, wszystkie obiekty tworzę przez new, ale mimo to coś kasuje ktorys z obiektow i program segfaultuje w tym momencie(linia 200 file.cpp):
void File::add_line(string line) {
lines.push_back(line);
}
valgrind pokazuje takie info na temat błedu:
==29517== Invalid read of size 8
==29517== at 0x405678: std::vector<std::string, std::allocator<std::string> >::push_back(std::string const&) (stl_vector.h:735)
==29517== by 0x4037AE: File::add_line(std::string) (file.cpp:200)
==29517== by 0x40C32C: Revision::parse() (revision.cpp:35)
==29517== by 0x40944D: Repo::load() (repo.cpp:65)
==29517== by 0x409818: Repo::commit(std::string) (repo.cpp:109)
==29517== by 0x40970E: Repo::commit() (repo.cpp:97)
==29517== by 0x408997: main (main.cpp:58)
==29517== Address 0x10 is not stack'd, malloc'd or (recently) free'd
==29517==
==29517==
==29517== Process terminating with default action of signal 11 (SIGSEGV)
==29517== Access not within mapped region at address 0x10
==29517== at 0x405678: std::vector<std::string, std::allocator<std::string> >::push_back(std::string const&) (stl_vector.h:735)
==29517== by 0x4037AE: File::add_line(std::string) (file.cpp:200)
==29517== by 0x40C32C: Revision::parse() (revision.cpp:35)
==29517== by 0x40944D: Repo::load() (repo.cpp:65)
==29517== by 0x409818: Repo::commit(std::string) (repo.cpp:109)
==29517== by 0x40970E: Repo::commit() (repo.cpp:97)
==29517== by 0x408997: main (main.cpp:58)
valgrind wskazuje na miejsce gdzie robię push_back, ale skoro metoda add_line dostaje stringa przez wartość, to co może powodować ŧe tego stringa już nie ma? Albo na której linijce z backtrace'u robię jakiś inny bład?