我在以下代碼中遇到分段錯誤。這是大學的C專案。這段代碼的目的是從輸入檔案中讀取資料,并將其放入一個用雙指標創建的二維陣列中。換句話說,在第一個“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 %d\n", linha, coluna, labirinto->map[linha][coluna]);
}
return;
}
我有一個結構:
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;
}
uj5u.com熱心網友回復:
代碼,分配和釋放,到目前為止看起來不錯。
但是您應該檢查讀取的值:
if (fscanf(InputFile1, "%d %d %d", &linha, &coluna, &valor)!=3) {
exit(0);
}
if (linha >= labirinto->num_linhas) {
fprintf(stderr, "linha overflow: %d vs %d\n", linha, labirinto->num_linhas);
exit(1);
}
if (coluna >= labirinto->num_colunas) {
fprintf(stderr, " overflow: %d vs %d\n", coluna, labirinto->num_colunas);
exit(1);
}
labirinto->map[linha][coluna]=valor;
我猜想,給出的行和列從1up開始,max而不是0to max - 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322586.html
標籤:C
上一篇:為什么我的排序函式輸出垃圾值?
