为什么我在最后一行出现细分错误? 我尝试搜索但未找到解决方案,有人可以告诉我为什么我遇到了细分错误吗?
int **o_position(char **map)
{
int i;
int j = 0;
int k = 0;
int count = 0;
int **pos_o = malloc(sizeof(int *));
for (i = 0; map[i][j] != '\0'; i++) {
for (j = 0; map[i][j] != '\n'; j++) {
if (map[i][j] == 'O')
count++;
}
}
pos_o = malloc(sizeof(int) * (count * 2));
pos_o[0][k++] = count;
}
答案 0 :(得分:1)
您的pos_o
变量(它是指向指针变量的指针)存储1个单元的连续内存段的基地址-此处,该单元实际上是另一个存储位置的基地址。 (对于另一个内存位置,您无处分配内存。)我认为您理解这一点,因为您已经写了此行int **pos_o = malloc(sizeof(int *));
-(此处您要按{{1}分配1个单位}(用于指针变量)。但是,没有任何地方为该指针变量将指向的变量分配内存。
不分配内存不是问题,但是在不分配内存的情况下引用内存位置可能会导致分段错误。
您应该有类似sizeof(int*)
的内容(我建议仅将其分配给一个整数变量,因为我看到您的变量pos_o[0]=malloc(sizeof(int))
始终为0,并且您仅访问一个元素)。如果您的变量k
被此处未提及的某些逻辑修改,请考虑分配更多(适当数量的)内存。
从here中了解有关分段错误的更多信息。