Помогите найти ошибку в программе на C
Компилятор выдаёт ошибку Segmentation fault, проверил на выход за пределы, вроде нигде за пределы выделенной памяти не выхожу.
main.c:
#include "golova.h"
int main(void) {
int M = 25;
int N = 10;
char** field = (char**)malloc(M * sizeof(char*));
for (int i = 0; i < M; i++) {
field[i] = (char*)malloc(N * sizeof(char));
}
init_field(field, M, N);
draw_field(field, M, N);
clear(field, M, N);
return 0;
}
funcs.c
#include "golova.h"
void draw_field(char** f, int M, int N) {
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
printf("%s", f[i][j]);
}
}
}
void init_field(char** f, int M, int N) {
int h_count = 0;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
if ((i == 0) || (i == M)) {
f[i][j] = '|';
break;
}
if ((j == 0) || (j == N)) {
f[i][j] = '_';
break;
} else {
f[i][j] = ' ';
}
}
}
}
void clear(char ** f, int M, int N) {
for (int i = 0; i < M; i++){
free(f[i]);
}
free(f);
getchar();
getchar();
}
golova.h
#ifndef GOLOVA_H
#define GOLOVA_H
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void draw_field(char ** f, int M, int N);
void init_field(char ** f, int M, int N);
void clear(char ** f, int M, int N);
#endif /*GOLOVA_H*/
Источник: Stack Overflow на русском