在C中迭代时,2D数组突然变为未定义

时间:2015-04-24 00:10:15

标签: c arrays

我有一个全局2D数组并迭代这样的值(MAXV = 100,在graph.h中定义):

#include "graph.h"

int adjacency_array[MAXV][MAXV];

manipulate(graph *g){
    int m,n;
    for (m = 1; m <= g->nvertices; m++){
        for (n = 1; n <= g->nvertices; n++){
            if (m != n){
                if (adjacency_array[n][m] != 1){
                }
            }
        }
    }

我只关心索引1-6,而不是0或&gt; 6。在这种情况下,g->nvertices是6.在迭代2D数组的同时,我得到一个seg。 if (adjacency_array[n][m] != 1)的错误。它的具体情况是seg。当m = 4且n = 3时,故障处于。检查数组的任何值都将是seg。那时候的错误,所以我不知道这些值是否特别成问题。如果我提供的内容不清楚,我很抱歉,如果需要,我会尽力澄清。

1 个答案:

答案 0 :(得分:0)

根据您的假设(MAXV == 100g->nvertices == 6),您的代码不应该是错误的,因此您的假设是错误的。

最可能的解释是您传递的指针g未正确初始化,或者不是图形指针 在这种情况下,访问g->nvertices可能会导致seg错误,或者在访问MAXV时可能返回等于或大于adjacency_array[n][m]的值导致seg-fault。 在调试模式下,Microsoft's C Runtime for example用大数字填充内存。

您是否尝试使用调试器运行或打印MAXVg->nvertices的值?