我的情况很奇怪。我正在尝试在我的相机管理软件中实现一个 10 多年前的 pci 相机设备 SDK。制造商不再营业,我没有机会获得官方帮助。所以我在这里,为我的丑陋问题寻找一些帮助。
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 上运行良好?!这可能是由编译器或 c++ 运行时差异引起的,但我在这个主题上不是很有经验,所以很难说出我的某些原因。
我尝试将大小更改为预期的最大字节数,如下所示;
typedef struct AVData {
...
BYTE audioVideoData[20000];
}AVDATA, *PAVDATA;
这有助于它开始工作,但有时我在尝试破坏库的解码器对象时遇到内存访问冲突问题。
这肯定有问题。我没有 SDK 的源代码,只有 DLL、Lib 和 Header 文件。我的问题是:
1)在Visual Studio 6.0版本中为固定大小的数组分配空间真的合法吗?
2)是否有任何可能的方法(编译器选项等)使相同的代码适用于较新的 VS 版本/C++ 运行时?
3)由于我编辑头文件的解决方法在一定程度上有效但仍然存在问题,您知道解决此问题的更好方法吗?