Ошибка сегментации в кратком объеме кода - PullRequest
0 голосов
/ 30 марта 2019

Я пытался что-то, но натолкнулся на это маленькое препятствие.Почему я получаю Segault по этому поводу?

int main()
{
    int col_num,row_num=0;
    FILE *f = fopen("db.csv", "w+");

    int row_max = 10000;        
    int col_max = 10000;

    !!!row_num & col_num is determined due to time!!!

    int end_matrix[row_num][col_num];
    for(int row=0;row!=row_max;row++){
        for(int column=0;column!=col_max;column++){
            end_matrix[row][column] = row*column;    
        }  
        fprintf(f,"\n");
    }
    fclose(f);
}

1 Ответ

0 голосов
/ 30 марта 2019

Вы используете функцию массива переменной длины C99, чтобы определить размер end_matrix. К сожалению, row_num и col_num оба равны нулю, что означает, что ни одному «измерению» не выделено никакого хранилища. Когда вы пытаетесь записать в массив, так как для него не было зарезервировано хранилище, вы пишете после конца и запускаете неопределенное поведение, которое проявляется как ошибка.

Похоже, у вас есть row_max и col_max, определенные как константы; возможно, вы хотели использовать их вместо row_num и col_num при определении end_matrix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...