0

予告なしに値を増やす変数があります。その動作は、コードのいくつかのランダムな部分で単純な 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: 質問が十分に明確であったかどうかはわかりませんが、そうでない場合は、必要な情報を尋ねてください。

4

2 に答える 2