【发布时间】:2015-06-29 07:28:15
【问题描述】:
我正在使用vector<pair<int,int> > ar[100000];
我必须将它用于几个测试用例,每次我希望它初始化但我遇到了分段错误。
我尝试在测试用例循环内部和全局范围内声明它。对于第一个测试用例或只有一个测试用例,它运行良好。
我也尝试在每个测试用例之后删除向量,但我不知道删除这种类型向量的确切语法,有什么帮助吗??
int main() {
long long a, b, c, d = 0, i, j, n, m, t;
scanf("%lld", &t);
while (t--) {
scanf("%lld %lld", &n, &m);
vector<pair<long long, long long> > ar[n + 9];
for(i = 0; i < m; i++) {
scanf("%lld %lld %lld",&a,&b,&c);
ar[a - 1].push_back(make_pair(b - 1, c));
ar[b - 1].push_back(make_pair(a - 1, c));
}
vector<long long> distance(10000, 100000000);
scanf("%lld", &a);
dijkstra(ar, a - 1, distance);
for (i = 0; i < n; i++) {
if (i == a - 1)
continue;
if (distance[i] != 100000000)
printf("%lld ", distance[i]);
else {
// printf("%lld\n", visited[i]);
printf("-1 ");
}
}
printf("\n");
// ar.clear();
distance.clear();
}
return 0;
}
【问题讨论】:
-
你有一个 array 向量,也许你想要一个向量向量?
-
如果您指出发生崩溃的在哪里,这也会有所帮助。您可以通过在调试器中运行程序的调试版本来做到这一点,并在发生崩溃时检查调用堆栈以查看 您的代码 中发生崩溃的位置。如果您可以将调用堆栈向上移动到您的代码并获取所涉及变量的值,例如例如用于向量的索引。
-
顺便说一下,如果
n是100000(或附近)并且distance向量的大小只有10000,你可以超出@987654327 的范围第二个for循环中的@向量。 -
m总是小于n+9吗? n 总是小于 10000 吗?为什么不用图中的节点数初始化距离?