Код: Выделить всё
#include
#include
#include
#include
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
template
class MyTestClass : public TestClass {
void __Invoke(TestClassImpl::__voidFunc m) override {
// Remove b and the test passes!
auto b = new bool(true); // or: switch value to false and it passes!
TestClass::__Invoke(m);
delete b;
}
};
class ActualTestClass : public MyTestClass {
TEST_METHOD(ActualTestMethod) {
for (auto x : std::initializer_list({std::nullopt})) {
Assert::IsFalse(x.has_value());
std::stacktrace::current();
}
}
};
Это отлично работает. Но в некоторых случаях это приводит к повреждению x. Почему?
Дополнительная информация:
- Это происходит только при создании сборки «Выпуск», а не для сборок «Отладка».
- Это происходит независимо от подключенного отладчика.
- Это происходит только при выделении кучи (, make_unique, ...), но не при выделении стека в одном и том же месте.
Код: Выделить всё
new bool - Мне не удалось еще больше сократить код. В частности, это должен быть цикл, он должен использовать std::initializer_list, он должен вызывать std::stacktrace::current() и т. д.
- Это происходит только при подключенном отладчике, а не при «запуске» теста в обозревателе тестов Visual Studio.
- Они могут удалить
и все равно может воспроизвести проблему.
Код: Выделить всё
std::stacktrace::current();
Подробнее здесь: https://stackoverflow.com/questions/798 ... inside-mic
Мобильная версия