Подобные вещи обычно случаются, когда программа пытается выполнить данные в виде кода. В свою очередь это обычно происходит, когда что-то попирает стек и перезаписывает адрес возврата.
В этом случае я бы предположил, что «IP0075» является указателем инструкций, и что выполненные недопустимые инструкции были по адресу 0x0075. Держу пари, что этот адрес НЕ привязан к исполняемому коду приложения.
ОБНОВЛЕНИЕ на возможном соединении с 'fopen': OP заявляет, что удаление кода fopen
устраняет проблему. К сожалению, это не доказывает, что код fopen
является причиной проблемы. Например:
Удаленный код может включать в себя дополнительные локальные переменные, что может означать, что в одном случае растоптывание стека ударяет по адресу возврата ... а в другом случае - какое-то слово, которое не будет использоваться.
Удаленный код может привести к изменению размера сегмента кода, в результате чего какой-либо значимый адрес будет указывать куда-то еще.
Проблема почти наверняка в том, что ваше приложение сделало что-то с "неопределенным поведением" в соответствии со стандартом C. Может случиться что угодно, и есть вероятность, что это не будет иметь никакого смысла.
Отладка такого рода проблем может быть очень сложной. Вам, вероятно, следует начать с запуска «lint» или аналога над вашим кодом и исправления всех предупреждений. Далее, вам, вероятно, следует использовать хороший отладчик и пошаговое приложение, чтобы попытаться найти, куда оно переходит к неверному коду / адресу. Затем вернитесь, чтобы выяснить, что послужило причиной этого.