分割默认(双指针/结构)

  • 本文关键字:结构 指针 默认 分割 c
  • 更新时间 :
  • 英文 :


我对以下代码有分段错误。这是学校的C级项目。这段代码的目的是从输入文件中读取数据,并将其放入用双指针创建的2D数组中。换句话说,在第一个for循环中我将读取3个整数:行,列和值。例如,3 3 2,表示第3行,第3列,值2。

void cria_mapa(FILE *InputFile1, FILE *OutputFile, labirinto_struct *labirinto){
int i=0, k=0;
int linha,coluna,valor=0;
labirinto->map = (int **) malloc(labirinto->num_linhas*sizeof(int *));
if( labirinto-> map == NULL){
exit(0);
}
for(i=0;i<labirinto->num_linhas;i++){
labirinto->map[i] = (int *) calloc(labirinto->num_colunas, sizeof(int));
}
for(k=0;k<labirinto->num_paredes;k++){
if(fscanf(InputFile1, "%d %d %d", &linha, &coluna, &valor)!=3){
exit(0);
}
labirinto->map[linha][coluna]=valor;
fprintf(OutputFile, "%d %d %dn", linha, coluna, labirinto->map[linha][coluna]);
}
return;
}

和struct:

typedef struct _labirinto_struct
{
int num_linhas, num_colunas, num_paredes;
int Pxi, Pyi, Px2, Py2;
char letra;
int variante;
int **map;   
}labirinto_struct;
void free_mapa(labirinto_struct *labirinto){
int i=0;
for(i=0;i<labirinto->num_linhas;i++){
free(labirinto->map[i]);
}

free(labirinto->map);
return;
}

代码,分配和释放,到目前为止看起来很好。

但是你应该检查这些值:

if (fscanf(InputFile1, "%d %d %d", &linha, &coluna, &valor)!=3) {
exit(0);
}
if (linha >= labirinto->num_linhas) {
fprintf(stderr, "linha overflow: %d vs %dn", linha, labirinto->num_linhas);
exit(1);
}
if (coluna >= labirinto->num_colunas) {
fprintf(stderr, " overflow: %d vs %dn", coluna, labirinto->num_colunas);
exit(1);
}
labirinto->map[linha][coluna]=valor;

我猜,给出的行和列从1max开始,而不是从0max - 1