I have an infinite loop that breaks if user exits out of the main window. I have the following code running in the loop:
unsigned int* renderableShapeIndices = new unsigned int[aNumberCreatedAtRuntime];
// Do something
delete[] renderableShapeIndices;
Then the following happens a couple of loop iterations and cease to happen after the first iteration:
1st breakpoint:
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in Main.exe.
2nd breakpoint:
Unhandled exception at 0x00007FF8C3B8C729 (ntdll.dll) in InTimeEngine2D.exe: 0xC0000374: A heap has been corrupted (parameters: 0x00007FF8C3BF7780).
Has anyone else gone through similar issues? I have no idea what is going on.
Another interesting factor about this is that it only happens in debug mode. It does not happen in release mode.
asked Jun 17, 2022 at 4:39
6
The answer to the problem is in the comment section of the question.
Apparently, if one attempts to write to an array outside of its bounds, it will, but it ends up overwriting data of other places in the code, causing bugs in other parts of the program, even if these two parts of the program are unrelated. In my case, they were completely unrelated.
answered Jun 17, 2022 at 5:28
4
Egefix 12 / 10 / 2 Регистрация: 24.05.2022 Сообщений: 115 |
||||
1 |
||||
03.06.2022, 01:52. Показов 5650. Ответов 2 Метки нет (Все метки)
во время выполнения происходит это: Critical error detected c0000374
0 |
Egefix 12 / 10 / 2 Регистрация: 24.05.2022 Сообщений: 115 |
||||
03.06.2022, 01:56 [ТС] |
2 |
|||
Добавлено через 3 минуты Добавлено через 30 секунд
0 |
6314 / 3933 / 1577 Регистрация: 09.05.2015 Сообщений: 9,235 |
|
03.06.2022, 02:09 |
3 |
У вас в перепутаны длины массивов…
1 |
У меня есть бесконечный цикл, который прерывается, если пользователь выходит из главного окна. У меня в цикле работает следующий код:
unsigned int* renderableShapeIndices = new unsigned int[aNumberCreatedAtRuntime];
// Do something
delete[] renderableShapeIndices;
Затем происходит следующее через пару итераций цикла и перестает происходить после первой итерации:
1st breakpoint:
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in Main.exe.
2nd breakpoint:
Unhandled exception at 0x00007FF8C3B8C729 (ntdll.dll) in InTimeEngine2D.exe: 0xC0000374: A heap has been corrupted (parameters: 0x00007FF8C3BF7780).
Кто-нибудь еще сталкивался с подобными проблемами? Я понятия не имею, что происходит.
Еще одним интересным фактором является то, что это происходит только в режиме отладки. Это не происходит в режиме выпуска.
1 ответ
Лучший ответ
Ответ на проблему находится в разделе комментариев вопроса.
По-видимому, если кто-то попытается записать в массив за пределами его границ, это произойдет, но в конечном итоге это приведет к перезаписи данных в других местах кода, что вызовет ошибки в других частях программы, даже если эти две части программы не связаны. . В моем случае они были совершенно не связаны.
0
Christopher Barrios Agosto
17 Июн 2022 в 08:28
Результат будет выглядеть примерно так (главное — видны пути к файлам и видны значения параметров)
ole32.dll!OleUninitialize()Строка 557
в comole32ole232baseole2.cpp(557)
mir_core.mir!LeaveMessageLoop()Строка 362
в w:miranda-buildsrcmir_coresrcwindowsmiranda.cpp(362)
mir_app.mir!mir_main(wchar_t * cmdLine)Строка 226
в w:miranda-buildsrcmir_appsrcmiranda.cpp(226)
Miranda64.exe!wWinMain(HINSTANCE__ * __formal=0x0000000000000001, HINSTANCE__ * __formal=0x000000000014fe70, wchar_t * cmdLine=0x00000000005e6d3c, int __formal=96)Строка 62
в w:miranda-buildsrcmiranda32srcmiranda.cpp(62)
[Внешний код]
В приложении, использующем OpenTK, при включении встроенной отладки и нажатии F12 отладчик ломается:
Инструкция точки останова (оператор __debugbreak() или аналогичный вызов) была выполнена в …
Стек вызовов не очень помогает определить причину:
ntdll.dll!DbgBreakPoint()
ntdll.dll!DbgUiRemoteBreakin()
kernel32.dll!BaseThreadInitThunk()
ntdll.dll!RtlUserThreadStart()
Сначала я подумал, что это связано с AeDebug, однако это не так:
- изменение Auto ничего не дает
- изменение UserDebuggerHotKey ничего не делает
- изменение отладчика ничего не дает
- перезагрузка компьютера, сброс параметров Visual Studio ничего не делает
Простейшее приложение , где это происходит :
using OpenTK.Graphics.OpenGL;
using OpenTK.Mathematics;
using OpenTK.Windowing.Common;
using OpenTK.Windowing.Desktop;
using OpenTK.Windowing.GraphicsLibraryFramework;
using var window = new MyGameWindow(GameWindowSettings.Default, NativeWindowSettings.Default);
window.Run();
public class MyGameWindow : GameWindow {
public MyGameWindow(GameWindowSettings gameWindowSettings, NativeWindowSettings nativeWindowSettings)
: base(gameWindowSettings, nativeWindowSettings) { }
private double TotalTime { get; set; }
protected override void OnUpdateFrame(FrameEventArgs args) {
TotalTime += args.Time;
if (KeyboardState[Keys.F12])
TotalTime = 0;
}
protected override void OnRenderFrame(FrameEventArgs args) {
GL.Clear(ClearBufferMask.ColorBufferBit);
GL.ClearColor(Color4.FromHsv(new Vector4((float)TotalTime % 10f / 10f, 1.0f, 0.5f, 1.0f)));
SwapBuffers();
}
protected override void OnResize(ResizeEventArgs e) {
base.OnResize(e);
GL.Viewport(0, 0, e.Width, e.Height);
}
}
запускSettings.json:
{
"profiles": {
"DebugBreakF12": {
"commandName": "Project",
"nativeDebugging": true
}
}
}
Вопрос:
Как можно отключить__debugbreak
поведение при нажатии клавиши F12?
Или я должен просто забыть использовать клавишу F12, когда включена собственная отладка?