卡在0x00007FF74F27A526处有未处理的异常:堆栈溢出

时间:2018-11-21 02:09:15

标签: c++ c++11 templates

我有与堆栈溢出相关的异常。 需要明确的是,我没有递归函数,可能导致堆栈崩溃。尽管在我的应用程序中的某个地方,我正在使用std :: array创建一个巨大的数组,并且正在使用类模板。

我考虑过动态分配内存,但这是我最后要做的事情,也是在模板函数中,这导致我出现以下问题:

//class Template
template <class T, int Point, int End>
class Node;
private:
int Point;
int End;
std::array <T, Point*End>;
public:
// Rest of the stuff!
//Operator defined in class
//End of Node object1 is equal to Point of Node object2 always so;

template <int entry>
Node<T,Point,entry> operator* (const Node<T,End,entry> &source)
{
  Node<T,Point,entry> temporary_node(0.);

//for_loop to multiply each element store in std::array

return temporary_node;
}

很重要的一点是,我的数组大小约为10000000。

  1. 如果我不想使用动态内存分配,怎么办?

    • 如果我这样做,那我该如何在上面定义的*运算符中为临时节点动态分配内存,因为当我这样做时,它会占用向量的内存:

      节点临时节点;

  2. 我在Windows上,并且我也不想手动增加堆栈大小,因为手动超过1MB可以解决此问题,但这样做可能会带来风险,甚至可能会引起问题。

谢谢。

编辑

我刚刚在Linux上对其进行了检查,并且在那里可以正常工作。也许是因为考虑到Virtual,我认为Linux的堆栈大小约为8MB。可是啊!如果我不考虑使该应用程序适用于Windows堆栈默认范围,则这将使该应用程序对跨平台的友好程度降低。

1 个答案:

答案 0 :(得分:0)

您根本无法在堆栈上创建如此大的对象,而必须在堆上创建它们。

template <int entry>
std::unique_ptr<Node<T,Point,entry>> operator* (const Node<T,End,entry> &source)
{
  auto temporary_node = std::make_unique<Node<T,Point,entry>>(0.);

  //for_loop to multiply each element store in std::array

  return temporary_node;
}