我必须编写一个函数来浏览我之前存储在char **
中的Map。在每个char
中,我必须检查它周围的8个字符,并检查这9个字符中是否至少有2个对应于'#'
,因此我创建了一个struct *matrix
来检查这一点。
仅允许我使用以下函数/系统调用:malloc, free, exit, (f)open, (f)close, (f)read, (f)write, getline, ioctl, usleep, sigaction, signal, stat, lstat, fstat
问题是,尽管我检查了数组是否存在,程序还是返回了一个分段错误。
以下是与矩阵结构有关的两个函数:
matrix_t *create_matrix(char **map, size_t y, size_t x)
{
matrix_t *out = malloc(sizeof(matrix_t));
if (!out) {
my_perr("[ERROR] Memory's allocation failure\n");
}
out->nbr = 0;
set_mat_nbr(out, map, y - 1, x);
set_mat_nbr(out, map, y, x);
set_mat_nbr(out, map, y + 1, x);
return out;
}
void set_mat_nbr(matrix_t *matrix, char **map, long y, long x)
{
if (y != 0 && map[y] != NULL && x != 0 && map[y][x - 1] == '#') {
matrix->nbr++;
}
if (y != 0 && map[y] != NULL && map[y][x] == '#') {
matrix->nbr++;
}
if (y != 0 && map[y] != NULL && map[y][x + 1] == '#') {
matrix->nbr++;
}
}
下面是调用函数(这个函数还没有完成,目前只检查顶部边界):
void check_border(char **map)
{
size_t y = 0, x = 0;
matrix_t *matrix = NULL;
while (map[0][x] != '\0') {
matrix = create_matrix(map, 0, x);
if (matrix->nbr < 2) {
my_perr("[ERROR] Corrupted border\n");
}
free(matrix);
x++;
}
}
根据valgrind,segfault是在set_mat_nbr()的3if()上触发的,你知道我的代码出了什么问题吗?
1条答案
按热度按时间rdlzhqv91#
谢谢大家,我已经纠正了这个问题,现在一切都正常了。下面是新的代码:
以及: