c++ - 在 0x00007FF74F27A526 处遇到未处理的异常:堆栈内存溢出
问题描述
我有堆栈溢出相关的异常。要明确这一点,我没有可能导致堆栈爆炸的递归函数。尽管在我的应用程序的某个地方,我正在使用 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。
如果我不想使用动态内存分配,解决方案是什么:
假设我这样做了,那么如何在上面定义的 * 运算符中为临时节点动态分配内存,因为当我这样做时它会占用向量的内存:
节点临时节点;
我在 Windows 上,我也不想手动增加堆栈大小,因为手动超过 1MB 可以解决问题,但这会很冒险,而且可能有问题。
先感谢您。
编辑
我刚刚在 Linux 上检查了它,它在那里工作得非常好。也许是因为我认为 linux 的堆栈大小也考虑到 Virtual 大约 8MB。但是啊!如果我不考虑使其适用于 Windows 堆栈默认范围,这将使应用程序的跨平台友好性降低。
解决方案
您根本无法在堆栈上创建如此大的对象,而必须在堆上创建它们。
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;
}
推荐阅读
- java - sharepoint 2013 如何使用soap API更新托管元数据字段(TaxonomyFieldTypeMulti)
- minizinc - 有没有办法在 MiniZinc 中格式化字符串?
- reactjs - 当 foreignField 值不在 localField 中时如何使用 $lookup 进行聚合
- graylog2 - graylog 的日志显示错误信息:...导致 io.netty.channel.unix.Errors$NativeIoException: syscall:read(..) failed: Connection reset by peer)
- sql - 当 QGIS 中当前只有左或内部 SQL 连接可用时,我可以在表 B 中显示额外或缺失的行吗
- r - 在 lapply() 中将列和数据框参数传递给我的函数?
- python - 无法从末尾匹配字符串
- flutter - 如何在循环中进行 http 调用以在 dart flutter 中同步?
- oracle - 如何在主 RANGE 分区中自动创建 LIST 子分区
- c# - 如何在asp.net mvc 5中使用局部视图进行分页