我的代码有问题。我尝试创建一个结构" point"其中有一个相同结构的向量。如果N很小(1,2,3)则没有问题并且程序正确执行,而如果N足够大(10..100),编译器会返回此错误:
在抛出' std :: bad_alloc'
的实例后终止调用 what():std :: bad_alloc
我已经看过这个主题How to create a structure which contains a list of itself?,它说这是合法的,在一个结构中放入一个引用该结构的向量。非常感谢帮助。谢谢!
#include <iostream>
#include <vector>
using namespace std;
struct point{
int a;
int b;
vector<point> near;
};
int main()
{
int N = 100;
vector<vector<point>> a;
a.resize(N);
for ( int i = 0; i<N; i++){
a[i].resize(N);
}
for ( int i = 0; i<N; i++){
for ( int j=0; j<N; j++){
a[i][j].near.reserve(4);
if ( i+1< N) {a[i][j].near.push_back(a[i+1][j]);}
if ( i-1>=0) {a[i][j].near.push_back(a[i-1][j]);}
if ( j+1< N) {a[i][j].near.push_back(a[i][j+1]);}
if ( j-1>=0) {a[i][j].near.push_back(a[i][j-1]);}
}
}
return 0;
}
Windows 10 - Code :: blocks 16.01。
答案 0 :(得分:3)
你的内存不足。
执行以下操作时:
if ( i+1< N) {a[i][j].near.push_back(a[i+1][j]);}
您正在递归地复制a[i+1][j]
,包括其near
向量的内容!
因此,当你点击第10000个节点时,你正在复制很多向量。
您可能希望将邻居存储为指针:
struct point{
int a;
int b;
vector<point *> near;
};
...
if ( i+1< N) {a[i][j].near.push_back(&a[i+1][j]);}
...