Представьте себе такой код:Valgrind не показывает недопустимый доступ к памяти с неправильно используются c_str()
string f()
{
string r = "ab";
return r;
}
int main() {
const char *c = f().c_str();
printf("%s.\n", c);
return 0;
}
Этот код может врезаться, верно? Потому что эта строка, которую c
указывает на уничтожен. Но запуск его через Valgrind не показывает никаких недопустимых обращений к памяти. Зачем? Я знаю, что Valgrind не может проверить стек, но «ab» на самом деле находится на куче, верно?
Небольшая оптимизация строки. Попробуйте '«aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccc»' – StoryTeller
Что вы имеете в виду «Теперь мой актуальный вопрос заключается в следующем»? Спросите ** новый вопрос ** пожалуйста. –