new运算符 - 异常:内存位置的std :: bad_alloc

时间:2015-01-01 16:58:40

标签: c++ exception memory-management new-operator

我有一个名为node的简单结构,它保存一个值+2指向下一个/前一个节点。

template <class T>
struct node {

     node<T> *prev = NULL;
     node<T> *next = NULL;
     T data;        
};

这里我们有一个函数,可以在最后添加一个新节点。

void push_back( T val ) {           

    node<T> *n = new node<T>;   // create node to hold val
    n->data = val;              // set node data with val

    if ( node_count == 0 ) {     

        begins = n;             // begins points to first node          
    }
    else{

        ends->next = n;         // set next in ends
        n->prev = ends;         // set previous             
    }

    ends = n;                   // update ends
    node_count++;               // update list size
}                                       

最后,在main中,我们尝试创建30m链接节点,每个节点都包含一个唯一的int值。

int node_sum = 30000000;    
for (int i = 0; i != node_sum; i++){ 

    sl.push_back(i); 
}

运行时:

exex中0x74C0C42D处的未处理异常:Microsoft C ++异常:内存位置0x0047F53C处的std :: bad_alloc。

下面:

void push_back( T val ) {           

    node<T> *n = new node<T>;   // create node to hold val

当:

创建29388062th或2.9mnth节点,确切的节点数随每次运行而变化,但始终至少为2.938m。

我在考虑达到某种限制,但是任务经理说整个Windows平台只使用4GB的ram,这意味着有4gb的备用。

0 个答案:

没有答案