2011-09-16 117 views
3

我真的很感謝這個社區以及它爲我過去的編程問題提供的所有幫助。將C#字節數組轉換爲C++

現在不幸的是,我似乎無法找到這個問題的答案,乍一看,似乎是一個沒有道理的問題。 請注意,我目前正在使用C++ 6.0。

這裏是我想從C#轉換代碼:

byte[] Data = new byte[0x200000]; 
uint Length = (uint)Data.Length; 

在C++中,我宣佈新的字節數組Data如下:

BYTE Data[0x200000]; 
DWORD Length = sizeof(Data)/sizeof(DWORD); 

當我運行我的程序,我收到堆棧溢出錯誤(去圖)。我相信這是因爲這個數組非常大(如果我沒有弄錯的話2MB)。

有沒有什麼辦法可以在C++ 6.0中實現這個大小的數組?

+1

是在堆上聲明數組的一個選項嗎?我的意思是你有可能新建這個數組而不是在棧中聲明它? –

回答

2

目前,您正在線程堆棧上分配大量內存,這會導致堆棧溢出,因爲堆棧空間通常限制在幾兆字節。您可以在堆上創建數組與new(順便說一下,你是不正確地計算數組長度):

DWORD length = 0x200000; 
BYTE* Data = new BYTE[length]; 

你還不如用vector<BYTE>而不是原始數組:

vector<BYTE> Data; 
int length = Data.size(); 
+0

當我嘗試編譯聲明的向量時,編譯器指出「向量是未聲明的標識符」。有需要包含的標題嗎? – Brandon

+0

@Brandon:'#include '和'使用std :: vector;' –

+1

#include - 真的如果你不能用谷歌來解決這個問題,你就不會試圖去幫助自己。也不知道堆棧vs堆和STL告訴我,你可以通過購買一本涵蓋C++和STL基礎知識的書來幫助自己。沒有人提到的是,還需要用正確的delete []語法刪除該數組。 – Tod

3

用這種方式定義數組會導致以堆棧溢出結束的堆棧。您可以使用指針在堆上創建非常大的數組。例如:

BYTE *Data = new BYTE[0x200000]; 
相關問題