Запуская программу для получения матрицы с уменьшенным числом строк, я передал свой код для печати массива в его собственную функцию. Как только я это сделал, у меня появилась ошибка. Что меня озадачило, так это то, что несвязанное объявление переменной (см. Ниже) решило проблему с сегфоутом.
#include <stdio.h>
int COLS = 3;
int ROWS = 3;
void PrintArray(int array[][COLS]);
int main (int argc, char**argv) {
int i, ii = 0;
FILE *file;
file = fopen(argv[1], "r");
int array[ROWS][COLS];
fscanf(file, "%d %d", &ROWS, &COLS);
while (!feof(file))
{
fscanf(file, "%d", &array[i][ii]);
ii++;
if (fgetc(file) == '\n') {
i++;
ii = 0;
}
}
int j = 0, k = 0; //This solved the segfault.
PrintArray(array);
printf("\n");
fclose(file);
return 0;
}
void PrintArray(int array[][COLS]) //The printing function
{
int j, k;
for (j = 0; j < ROWS; j++)
{
for (k = 0; k < COLS; k++)
{
printf("%d", array[j][k]);
}
printf("\n");
}
}
После пары часов отладки я в конце концов понял, что это может иметь какое-то отношение к области видимости переменных в цикле for.
Для иллюстрации:
int COLS = 3;
int ROWS = 3;
int a; //declared globally
//main
for (a = 0; a < ROWS; a++) {
printf("for loop");
}
работает, но как только я объявляю "a" в основном:
int COLS = 3;
int ROWS = 3;
//main
int a; //declared in main
for (a = 0; a < ROWS; a++) {
printf("for loop");
}
это не работает.
Кроме того, если я заменю глобальные переменные числами, я по-прежнему получаю ошибку сегмента, пока не уберу строку, которая изначально исправила ошибку сегмента!
void PrintArray(int array[][3]) //COLS
{
int j = 0, k = 0;
for (j = 0; j < 3; j++) //ROWS
{
for (k = 0; k < 3; k++) //COLS
{
printf("%d", array[j][k]);
}
printf("\n");
}
}
Кажется, это насколько я могу понять проблему, поэтому мы будем благодарны за вашу помощь.