Я вижу некоторые нарушения прав доступа в приложении C #, которые вызывают c ++ dll (соглашение о вызовах cdecl)
В дампе трассировки стека я вижу некоторые плохие места в памяти:
2aabe80c 00020000 someCdll! Somefunction (
short * X_data = 0x00000001,
int * X_sizes = 0x00030002,
short * Y_data = 0x0000002b,
int * Y_sizes = 0x0e7115e8
short * T_data = 0x00000000,
struct someStruct * some_data) + 0x268
и получение исключения нарушения прав доступа.
Short * X_data = 0x00000001 выглядит недействительным.
Возможно ли, что эта функция изменила это, а затем вызвала нарушение доступа, или что-то еще изменило, и эта функция пытается записать, но получает нарушение доступа, прежде чем она фактически изменит память?
Или просто я получаю поддельные данные.
Редактировать *
Это было вызвано классическим переполнением буфера в неуправляемом коде. Указатель массива был загружен в регистр, а затем цикл позаботился об остальном, перезаписав все мои переменные стека, из-за чего он выглядел так, как будто код находился в другом состоянии, чем при сбое.
Спасибо
Jason