我有一個奇怪的情況。我正在嘗試將一個10多年前的pci攝像頭設備SDK應用於我的相機管理軟件。 Manifacturer不再生意,我沒有機會獲得官方幫助。所以我在這裏,爲我的醜陋問題尋找幫助。Visual Studio版本之間的不同未分配內存行爲
SDK附帶Visual Studio 6.0
樣本。其中一個包含文件的結構以下面的一個字節數組結尾;
typedef struct AVData {
...
BYTE audioVideoData[1];
}AVDATA, *PAVDATA;
但分配的byte數組這個單字節接收視頻幀和怪異的是,它的工作原理罰款與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)由於我的編輯頭文件的變通辦法到一個點,但仍然有問題,你知道什麼更好的辦法讓這個問題的身邊?
我想問題應該在別的地方。數組的大小在這裏不應該是個問題,它並不是一個上限。 – BlueWanderer
它被稱爲一個靈活的數組:http://stackoverflow.com/questions/5478706/flexible-array-member-c99-inside-a-structure –
但是,爲什麼我們會得到內存訪問衝突呢?如果我從這個結構創建一個新的對象,是不是創建的大小爲1(+其餘的結構元素)?那麼,我們以後如何將多個字節存儲到audioVideoData數組呢?是否有可能重新分配內存到一個固定大小的數組?由於它適用於VS 6.0版本,因此可能更早些,但VS 2005+怎麼樣? –