Итак, мне нужна помощь. Я работаю над проектом на C ++. Тем не менее, я думаю, что мне как-то удалось испортить мою кучу. Это основано на том факте, что я добавил std::string
к классу и присвоил ему значение из другого std::string
:
std::string hello = "Hello, world.\n";
/* exampleString = "Hello, world.\n" would work fine. */
exampleString = hello;
вылетает в моей системе с дампом стека. В общем, мне нужно остановить , пройти через весь мой код и управление памятью и выяснить, где я облажался. Кодовая база все еще мала (около 1000 строк), так что это легко выполнимо.
Тем не менее, я нахожусь над моей головой с такими вещами, поэтому я подумал, что я выброшу это там. Я нахожусь в системе Linux и ковыряюсь с valgrind
, и, хотя и не зная полностью, что я делаю, он действительно сообщил, что деструктор std::string
был недействительным free. Я должен признать, что термин «повреждение кучи» используется в поиске Google; любые статьи общего назначения о подобных вещах также приветствуются.
(до rm -rf ProjectDir
, повторить в C #: D)
EDIT:
Я не дал понять, но я спрашиваю, каким образом можно диагностировать подобные проблемы с памятью. Я знаю, что с std :: string все правильно, так что это то, что я сделал (или ошибка, но проблемы с выбором нет). Я уверен, что смогу проверить написанный мной код, и вы, очень умные люди, сразу увидите проблему, но я хочу добавить этот вид анализа кода к моей «панели инструментов».