C ++无法在堆上分配太大的对象数组

时间:2015-06-06 17:56:07

标签: c++ visual-studio-2013 heap-memory

我有以下c ++代码(在Visual Studio 2013上构建):

MapGraph& MapGraph::operator= (const MapGraph& other)
{
    if (this != &other)
    {
        this->primaryCopy = false;

        this->edges = new int[other.edgeQty];
        this->pointers = new int[other.vertexQty + 1];
        this->contents = new int[other.vertexQty]();
        this->weights = new NodeWeight[other.vertexQty];

阵列: edge 指针内容创建没有问题。但是当涉及权重创建时,它会抛出没有信息的异常。 newaop.cpp(不是我的项目文件)中发生异常:

// newaop -- operator new[](size_t) REPLACEABLE
#include <new>

void *__CRTDECL operator new[](size_t count) _THROW1(std::bad_alloc)
    {   // try to allocate count bytes for an array
    return (operator new(count));
    }

/*
 * Copyright (c) 1992-2007 by P.J. Plauger.  ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
 V5.03:0009 */

我不知道出了什么问题。有趣的是,如果我用较小的数字替换other.vertexQty(399)。例如:

        this->weights = new NodeWeight[10];

不抛出异常。你能告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

在线

   this->contents = new int[other.vertexQty]();

你有额外的&#34;()&#34;在末尾。 由于功能:

   new[](size_t) 

需要一个字节大小而你没有传递它,它会抛出一个异常或分配一个未知大小的内存,因此下面的创建工作的数量很少。

我认为删除它应该有用。