问题是在数据集中找到周期性图形模式.所以我在每个时间步长中有1000个时间步长和一个图形(编码为整数).因此,有999个可能的时间段可以出现图表.我还定义了一个定义为(timestep mod period)的相位偏移.对于在第5个时间段中首次出现的具有周期2的图形,相位偏移为1.
我试图用C++创建一个二维的列表数组.每个单元格包含一个包含具有指定周期和相位偏移的图形的列表.我一直在相应的列表中插入图表.
list<ListNode> A[timesteps][phase offsets]
Run Code Online (Sandbox Code Playgroud)
ListNode 是一个包含4个整数变量的类.
这给了我分段错误.使用500的大小运行正常.这是由于缺乏记忆还是其他一些问题?
谢谢.
可能是由于堆栈大小有限.
你正在创建一个1000x1000 = 1000000个对象的数组,几乎可以肯定每个至少4个字节,所以至少大约4兆字节.假设它在函数内部,它将是auto存储类,通常转换为在堆栈上分配.典型的堆栈大小约为1到4兆字节.
尝试类似:( std::vector<ListNode> A(1000*1000);并且,如果有必要,创建一个包装器使其看起来是二维的).
编辑:包装器会使操作符超载以为您提供2D寻址:
template <class T>
class array_2D {
std::vector<T> data;
size_t cols;
public:
array_2D(size_t x, size_t y) : cols(x), data(x*y) {}
T &operator()(size_t x, size_t y) { return data[y*cols+x]; }
};
Run Code Online (Sandbox Code Playgroud)
您可能想要修饰它(例如,使用边界检查),但这是一般的想法.解决它将使用(),如:
array_2d<int> x(1000, 1000);
x(100, 3) = 2;
y = x(20, 20);
Run Code Online (Sandbox Code Playgroud)