2015-05-31 3 views
0

Эта программа имеет ряд из файла и вводит матрицу n * n (n это число, взятое), который все матрицы равен 0.Сегментация ошибка при введении второй цикл

Проблема заключается в том, что если я просто один for который только 00, 11, 22, ... нет проблем, проблема возникает, когда я представляю второй for. Программа возвращает мне нарушение сегмента.

#include <stdio.h> 

int main(int argc, char* argv[]) 
{ 
    FILE* fitxer; 
    int n, m, i,j; 
    int inc[n][n]; 
    fitxer=fopen(argv[1], "rt");  

    if(fitxer == NULL) 
    { 
    fprintf(stderr, "ERROR: el fitxer %s no es pot obrir\n", argv[1]); 
    return 1; 
    } 
    else 
    { 
    if(!fscanf(fitxer, "%d %d", &n, &m)); 

    printf("%d, %d\n", n, m); 

    for(i=0; i<n; i++) 
    { 
     for(j=0; j<n; j++) 
     { 
     inc[i][j]=0; 
     printf("%d ", inc[i][j]); 
     } 
    } 
    printf("\n"); 


    } 

    fclose(fitxer);  
    printf("Bien!\n"); 
    return 0; 
} 
+2

'INT вкл [п] [п];' <- 'n' не инициализирован, и почему у вас есть' if', который ничего не делает ('если (fscanf (fitxer! , "% d% d", & n, &m)); ')? –

+0

Что такое значение n, когда' inc [n] [n] 'объявлено? Почему вы читаете' n' и 'm', и используете только' n' Когда объявляются 'n' и' inc', значение 'n' не определено. Присвоение значения' n' во время выполнения не может изменить выделение переменной 'inc [n] [n]'. –

ответ

1

Здесь:

int inc[n][n]; 

n в неинициализированным. Это приводит к неопределенному поведению. Переместить, что после

if(!fscanf(fitxer, "%d %d", &n, &m)); 

, чтобы устранить проблему. Но тогда if выше не имеет смысла. Зафиксируйте его с помощью:

if(fscanf(fitxer, "%d %d", &n, &m) != 2) //If fscanf failed to scan two integers from the file 
{ 
    printf("Error reading from file"); //Print error message 
    return 1;       //Exit the program 
} 
+0

(Это первое «Если» уже не имеет никакого смысла. Случай с «магическим мышлением»: другие используют это и, кажется, работают для меня ...) – usr2564301