2011-09-16 178 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]; 
相关问题