C++堆栈溢出初始化数组

C++堆栈溢出初始化数组,c++,exception,stack,overflow,C++,Exception,Stack,Overflow,初始化我创建的类型的数组时遇到一些问题 我创建了TreeEdge.h和TreeNode.h,可以在以下代码中看到: #pragma once #include "TreeEdge.h" class TreeNode { TreeEdge northEdge; TreeEdge eastEdge; TreeEdge southEdge; TreeEdge westEdge; int xCoord; int yCoord; public: // Default constructor Tre

初始化我创建的类型的数组时遇到一些问题

我创建了TreeEdge.h和TreeNode.h,可以在以下代码中看到:

#pragma once
#include "TreeEdge.h"

class TreeNode {

TreeEdge northEdge;
TreeEdge eastEdge;
TreeEdge southEdge;
TreeEdge westEdge;
int xCoord;
int yCoord;

public:

// Default constructor
TreeNode() {

}

//constructor 2
TreeNode(int xInput, int yInput) {
    xCoord = xInput;
    yCoord = yInput;
}

void setEastSouthEdges(TreeEdge east, TreeEdge south) {
    eastEdge = east;
    southEdge = south;
}

void setAllTreeEdges(TreeEdge north, TreeEdge east, TreeEdge south, TreeEdge west) {
    northEdge = north;
    eastEdge = east;
    southEdge = south;
    westEdge = west;
}
};

然后我尝试简单地初始化一个TreeNode数组,希望使用下面的代码对它做一些有用的事情

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <stdio.h>

#include "TreeEdge.h" 
#include "TreeNode.h"

using namespace cv;
using namespace std;

int main()
{
// create 2D array for tree
TreeNode imageTreeNodes[544][1024]; // ???????????????? way to use none fixed values

waitKey(0);
return 0;
}
但是,我收到一个错误:MST.exe中0x00007FF6E91493D8处的未处理异常:0xC00000FD:堆栈溢出参数:0x0000000000000001,0x0000002BF003000。一旦程序进入主功能

谢谢你的帮助


Rob

您在堆栈上使用数组分配了太多内存

 sizeof(TreeNode); // Returns 88 bytes
因此,当分配544x1024个元素的二维数组时,您试图在堆栈上分配~49MB!根据协议,进程的默认堆栈大小是1Mb,因此您遇到的堆栈溢出异常是因为进程内存不足

虽然可以增加进程堆栈的大小,但最好在堆上分配数组。这可以通过使用raw new和delete来实现,但更好的选择可能是使用std::vector。因此,将主视图更改为:

int main()
{
  std::vector<std::vector<TreeNode>> array(544, std::vector<TreeNode>(1024,TreeNode())) ;
  std::cout << "Array number of rows: " << array.size() << std::endl; // Prints 544
  std::cout << "Array number of columns: " << array[0].size() << std::endl; // Prints 1022
}

TreeNode imageTreeNodes[544][1024];正在堆栈上分配太多内存。请尝试在堆上分配。或者按照Gaurav Sehgal的建议,您可以提高由/为您的程序分配的堆栈数量。我记得在VS20xx中,可能在其他编译器中也有这样的选项。找到了这个和这个。感谢您的帮助,我已经开始使用向量,并且得到了相同的结果,错误也少了很多!
int main()
{
  std::vector<std::vector<TreeNode>> array(544, std::vector<TreeNode>(1024,TreeNode())) ;
  std::cout << "Array number of rows: " << array.size() << std::endl; // Prints 544
  std::cout << "Array number of columns: " << array[0].size() << std::endl; // Prints 1022
}