gpt4 book ai didi

c - 在 C 中迭代时,二维数组突然变得未定义

转载 作者:行者123 更新时间:2023-11-30 19:43:13 24 4
gpt4 key购买 nike

我有一个全局二维数组,并像这样迭代这些值(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 或 >6。在本例中,g->nvertices 为 6。在迭代 2D 数组时,有一次我得到了一个 seg。 if (adjacency_array[n][m] != 1) 处出现错误。具体情况具体分析。故障发生在 m=4 且 n=3 时。检查数组的任何值都会进行分段。那时出现错误,所以我不知道这些值是否有问题。如果我提供的内容不清楚,我很抱歉,如果需要,我会尽力澄清。

最佳答案

鉴于您的假设(MAXV == 100g->nvertices == 6),您的代码不应出现段错误,因此您的假设是错误的。

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

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

关于c - 在 C 中迭代时,二维数组突然变得未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29836549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com