【发布时间】:2013-09-20 04:14:17
【问题描述】:
我有一个变量会在没有任何通知的情况下增加它的值。它的行为可以通过在代码的一些随机部分中通过简单的 printf() 来修改。
我在 gdb 中附加了我的可执行文件并得到了这个:
101 graus[grau]++;
(gdb) print arestas
$7 = 5
(gdb) n
95 for (i = 1 ; i <= vertices ; i++) {
(gdb) print arestas
$8 = 6
这里是代码块:
unsigned grau;
unsigned graus[vertices-1];
memset(graus, 0, sizeof(graus));
for (i = 1 ; i <= vertices ; i++) {
grau = 0;
for (j = 1 ; j <= vertices ; j++) {
if (getValueFromMatrix(matrix, i, j))
grau++;
}
graus[grau]++;
}
这没有任何意义,因为循环中甚至没有使用“arestas”变量!
“arestas”变量在循环之前使用,并用这段代码声明:
matrix = createMatrix(vertices, vertices);
arestas = 0;
if (!(arestas = loadAdjacencyMatrixFromFile(file, matrix))) {
fprintf(stderr, "ERRO: O arquivo fornecido não é valido\n");
exit(arestas);
}
感谢您的帮助。
PS:我不知道问题是否足够清楚,但如果没有,请询问所需的信息。
【问题讨论】:
-
你确定你没有超出
graus的范围吗?