我无法在c ++中为我的1D数组分配内存。我尝试使用malloc和new运算符。当我使用malloc时,merge
的值为0。在新运算符的情况下,我获得异常std::bad_alloc at memory location ...
。 data_length
的值为131596814.我有8GB内存,而且有很多是免费的。我使用的是Visual Studio 2012,调试/发布模式对它没有影响。
unsigned int* merge = (unsigned int*) malloc(2 * data_length * sizeof(unsigned int));
unsigned int* merge = new unsigned int[data_length * 2];
我在这里做错了吗?
答案 0 :(得分:3)
必须将C / C ++(和许多其他语言)中的数组分配为一个连续的内存块。
您正在尝试分配1GB块 - 如果符合x86(32位),这几乎是不可能的,特别是如果它不是第一次分配。限制来自Windows上的默认2GB地址空间(如果您的主机系统是x64并且您的进程被标记为“大地址识别”,则可以扩展到近4GB)以及由半随机位置加载的DLL导致的地址空间碎片在地址空间以及程序以前的内存分配。
修正: