У меня есть функция loadmap (), которая в основном загружает сетку из файла. В нем я динамически создаю массив целых чисел с именем 'mapa'.
int loadmap(int *n) {
int i, j;
int **mapa;
int num;
char space;
int count = 0;
FILE *f;
f = fopen(SUBOR, "r");
fscanf(f, "%d%c", &num, &space);
while (space != '\n') {
count++;
fscanf(f, "%d%c", &num, &space);
}
mapa = (int **)malloc(pocet * sizeof(int *));
for (i = 0; i < pocet; i++) {
mapa[i] = (int *)malloc(pocet * sizeof(int));
}
rewind(f);
for (i = 0; i < pocet; i++) {
for (j = 0; j < pocet; j++) {
fscanf(f, "%d%c", &num, &space);
mapa[i][j] = num;
}
}
*n = count;
return **mapa;
}
Затем в основном я хотел бы использовать этот возвращаемый указатель на массив в качестве аргумента для других функций. Я пытался сохранить его во всех возможных переменных, но ничего не получалось. Вот то, что у меня сейчас есть.
int main() {
int **mapa;
int n;
int ki, kj;
**mapa = loadmap(&n);
printf("rozmer stvorcovej mapy: %d\n", n);
najdi_kopec(mapa, n, &ki, &kj);
printf("suradnice kopca: %d, %d\n", ki, kj);
zidi_kopec(mapa, n, ki, kj);
return 0;
}
Я думаю, что это ближе всего к решению, потому что оно работает с тем, как должна быть написана остальная часть программы, но это создает 'неинициализированную локальную переменную 'mapa' used 'error . Я не уверен, что использую правильный подход, я только начинаю с C. Не могли бы вы предложить некоторые настройки, чтобы сделать то, что у меня есть работа или другой рабочий подход в целом?
Спасибо
--------- РЕДАКТИРОВАТЬ --------- ---
добавление объявлений других функций
void najdi_kopec(int **mapa, int n, int *ki, int *kj) {
int i, j;
*ki = *kj = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (mapa[i][j] > mapa[*ki][*kj]) {
*ki = i;
*kj = j;
// printf("i: %d, j: %d, mapa: %d\n", *ki, *kj, mapa[*ki][*kj]);
}
}
void zidi_kopec(int **mapa, int n, int ki, int kj) {
int i, j, max;
while (ki != 0 && ki != n - 1 && kj != 0 && kj != n - 1) {
max = 0;
// sever
if (ki - 1 >= 0 && mapa[ki - 1][kj] > max &&
mapa[ki - 1][kj] < mapa[ki][kj]) {
i = ki - 1;
j = kj;
max = mapa[i][j];
}
// vychod
if (kj + 1 < n && mapa[ki][kj + 1] > max &&
mapa[ki][kj + 1] < mapa[ki][kj]) {
i = ki;
j = kj + 1;
max = mapa[i][j];
}
// juh
if (ki + 1 < n && mapa[ki + 1][kj] > max &&
mapa[ki + 1][kj] < mapa[ki][kj]) {
i = ki + 1;
j = kj;
max = mapa[i][j];
}
// zapad
if (kj - 1 >= 0 && mapa[ki][kj - 1] > max &&
mapa[ki][kj - 1] < mapa[ki][kj]) {
i = ki;
j = kj - 1;
max = mapa[i][j];
}
printf("i: %d, j: %d, vyska: %d\n", i, j, max);
ki = i;
kj = j;
}
}