Я пытался протестировать переполнение кучи:
Поэтому я добавляю много фиктивных элементов к вектору.
Мое ожидание: какое -то исключение (плохое распределение или что -то в этом роде). < /p>
(поскольку вектор - это смешанная область памяти, ристериалы, вероятно, произойдут, когда вектор растут. Я задаюсь вопросом, как я могу обнаружить, если я могу обнаружить, в том случае, если я могу обнаружить, в том случае, если я могу обнаружить, в том случае, если я могу обнаружить, в том случае, если я могу обнаружить. std :: vector :: push_back , push_back не имеет никакого возвращаемого значения).
Кроме того, я определил пользовательский обработчик завершения. Пользовательский обработчик завершения устанавливается до переполнение кучи.void CFatal_Error::Set_Termination_Handler()
{
set_terminate(Termination_Handler);
}
void CFatal_Error::Termination_Handler()
{
// Crash and stop here
configASSERT(0);
}
< /code>
Переполнение кучи провоцируется: < /p>
vector test;
try
{
for (uint32_t i = 0; i < UINT32_MAX; i++)
{
test.push_back(i);
}
}
catch (const exception &ex)
{
configASSERT(0);
}
< /code>
Во -первых, я ожидаю, что я сталкиваюсь с исключением, но вместо этого я перехожу прямо к тяжелой ошибке. Каково объяснение этого поведения? < /P>
Флаги компилятора используются < /h3>
Building file: ../Test_SD.cpp
Invoking: MCU G++ Compiler
\Debug
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 '-D__weak=__attribute__((weak))' '-D__packed=__attribute__((__packed__))' -DUSE_HAL_DRIVER -DSTM32F429xx -I"Inc" -I"Inc/User" -I"xxx/Inc/User/debug" -I"xxx/Inc/User/Testcases" -I"xxx/Inc/User/display" -I"xxx/Inc/User/SD" -I"xxx/Inc/User/SD/XML" -I"xxx/Drivers/STM32F4xx_HAL_Driver/Inc" -I"xxx/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy" -I"xxx/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F" -I"xxx/Middlewares/ST/STM32_USB_Device_Library/Core/Inc" -I"xxx/Middlewares/ST/STemWin/Config" -I"xxx/Middlewares/ST/STemWin/inc" -I"xxx/Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Inc" -I"xxx/Drivers/CMSIS/Device/ST/STM32F4xx/Include" -I"xxx/Middlewares/Third_Party/FatFs/src" -I"xxx/Middlewares/Third_Party/FreeRTOS/Source/include" -I"xxx/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS" -I"xxx/Drivers/CMSIS/Include" -g3 -pedantic -Wall -Wextra -Wconversion -fmessage-length=0 -std=c++17 -ffunction-sections -c -fno-rtti -MMD -MP -MF"Src/User/Testcases/Test_SD.d" -MT"Src/User/Testcases/Test_SD.o" -o "Src/User/Testcases/Test_SD.o" "../Src/User/Testcases/Test_SD.cpp"
Finished building: ../Src/User/Testcases/Test_SD.cpp
< /code>
Линкеры используются < /h3>
Building target: xxx.elf
Invoking: MCU G++ Linker
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -L"xxx\Middlewares\ST\STemWin\Lib" -specs=nosys.specs -specs=nano.specs -u_printf_float -T"../STM32F429ZITx_FLASH.ld" -Wl,-Map=output.map -Wl,--gc-sections -fno-exceptions -fno-rtti -o "Giessomat.elf" @"objects.list" -lSTemWin540_CM4_OS_GCC -lm
Finished building target: Giessomat.elf
make --no-print-directory post-build
Generating binary and Printing size information:
Подробнее здесь: https://stackoverflow.com/questions/507 ... -hardfault
Переполнение кучи C ++ приводит к хардзору ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1757848240
Anonymous
Я пытался протестировать переполнение кучи:
Поэтому я добавляю много фиктивных элементов к вектору.
Мое ожидание: какое -то исключение (плохое распределение или что -то в этом роде). < /p>
(поскольку вектор - это смешанная область памяти, ристериалы, вероятно, произойдут, когда вектор растут. Я задаюсь вопросом, как я могу обнаружить, если я могу обнаружить, в том случае, если я могу обнаружить, в том случае, если я могу обнаружить, в том случае, если я могу обнаружить, в том случае, если я могу обнаружить. std :: vector :: push_back , push_back не имеет никакого возвращаемого значения).
Кроме того, я определил пользовательский обработчик завершения. Пользовательский обработчик завершения устанавливается [b] до [/b] переполнение кучи.void CFatal_Error::Set_Termination_Handler()
{
set_terminate(Termination_Handler);
}
void CFatal_Error::Termination_Handler()
{
// Crash and stop here
configASSERT(0);
}
< /code>
Переполнение кучи провоцируется: < /p>
vector test;
try
{
for (uint32_t i = 0; i < UINT32_MAX; i++)
{
test.push_back(i);
}
}
catch (const exception &ex)
{
configASSERT(0);
}
< /code>
Во -первых, я ожидаю, что я сталкиваюсь с исключением, но вместо этого я перехожу прямо к тяжелой ошибке. Каково объяснение этого поведения? < /P>
Флаги компилятора используются < /h3>
Building file: ../Test_SD.cpp
Invoking: MCU G++ Compiler
\Debug
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 '-D__weak=__attribute__((weak))' '-D__packed=__attribute__((__packed__))' -DUSE_HAL_DRIVER -DSTM32F429xx -I"Inc" -I"Inc/User" -I"xxx/Inc/User/debug" -I"xxx/Inc/User/Testcases" -I"xxx/Inc/User/display" -I"xxx/Inc/User/SD" -I"xxx/Inc/User/SD/XML" -I"xxx/Drivers/STM32F4xx_HAL_Driver/Inc" -I"xxx/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy" -I"xxx/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F" -I"xxx/Middlewares/ST/STM32_USB_Device_Library/Core/Inc" -I"xxx/Middlewares/ST/STemWin/Config" -I"xxx/Middlewares/ST/STemWin/inc" -I"xxx/Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Inc" -I"xxx/Drivers/CMSIS/Device/ST/STM32F4xx/Include" -I"xxx/Middlewares/Third_Party/FatFs/src" -I"xxx/Middlewares/Third_Party/FreeRTOS/Source/include" -I"xxx/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS" -I"xxx/Drivers/CMSIS/Include" -g3 -pedantic -Wall -Wextra -Wconversion -fmessage-length=0 -std=c++17 -ffunction-sections -c -fno-rtti -MMD -MP -MF"Src/User/Testcases/Test_SD.d" -MT"Src/User/Testcases/Test_SD.o" -o "Src/User/Testcases/Test_SD.o" "../Src/User/Testcases/Test_SD.cpp"
Finished building: ../Src/User/Testcases/Test_SD.cpp
< /code>
Линкеры используются < /h3>
Building target: xxx.elf
Invoking: MCU G++ Linker
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -L"xxx\Middlewares\ST\STemWin\Lib" -specs=nosys.specs -specs=nano.specs -u_printf_float -T"../STM32F429ZITx_FLASH.ld" -Wl,-Map=output.map -Wl,--gc-sections -fno-exceptions -fno-rtti -o "Giessomat.elf" @"objects.list" -lSTemWin540_CM4_OS_GCC -lm
Finished building target: Giessomat.elf
make --no-print-directory post-build
Generating binary and Printing size information:
Подробнее здесь: [url]https://stackoverflow.com/questions/50727529/c-heap-overflow-results-in-a-hardfault[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия