Различное поведение нераспределенной памяти между версиями Visual Studio

У меня странная ситуация. Я пытаюсь внедрить SDK устройства камеры PCI более 10 лет назад в свое программное обеспечение для управления камерой. Производитель больше не работает, и у меня нет возможности получить официальную помощь. Вот и я, ищу помощи в моей уродливой проблеме.

SDK поставляется с примерами Visual Studio 6.0. Один из включаемых файлов имеет структуру, заканчивающуюся массивом из одного байта, как показано ниже;

typedef struct AVData {
    ...  
    BYTE audioVideoData[1];
}AVDATA, *PAVDATA;

Но этот однобайтовый выделенный массив байтов получает видеокадры и, как ни странно, он отлично работает с версией Visual Studio 6.0. Если я попробую это с Visual Studio 2005/2008/2010, я начну получать сообщения об ошибках Memory Access Violation, что на самом деле имеет смысл, поскольку после этого не должно быть возможности выделить пространство для массива фиксированного размера, не так ли? Но тот же код отлично работает с VS 6.0?! Вероятно, это вызвано различиями во времени выполнения компилятора или С++, но я не очень разбираюсь в этом вопросе, поэтому мне трудно сказать точную причину.

Я попытался изменить размер на ожидаемое максимальное количество байтов, как показано ниже;

typedef struct AVData {
    ...  
    BYTE audioVideoData[20000];
}AVDATA, *PAVDATA;

Это помогло ему начать работать, но время от времени я получаю проблемы с нарушением доступа к памяти при попытке уничтожить объект декодера библиотеки.

С этим определенно что-то не так. У меня нет исходных кодов SDK, только файлы DLL, Lib и Header.Мои вопросы:

1) Действительно ли законно выделять пространство для массива фиксированного размера в версии Visual Studio 6.0?

2) Есть ли какой-либо возможный способ (опция компилятора и т. д.), чтобы тот же код работал с более новыми версиями VS/средами выполнения C++?

3) Поскольку мой обходной путь редактирования файла заголовка работает до определенного момента, но все еще имеет проблемы, вы знаете какой-нибудь лучший способ обойти эту проблему?

5
задан Emir Akaydın 11 May 2012 в 13:20
поделиться