编译器抛出分段错误,检查是否越界,似乎我没有超出任何地方分配的内存。
主要.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;
}
函数.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();
}
戈洛瓦.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*/
最重要的是——
field不是一块内存,而是一个指向字符串的指针数组,所以**(f + i * M + j)不行这里尺寸很混乱
char** 字段 = (char**)malloc( M * sizeof(char*));
for (int i = 0; i < N; i++) {
A
|| i == M永远不会工作