malloc int数组(分段错误)

时间:2018-12-08 17:17:45

标签: c

为什么我在最后一行出现细分错误? 我尝试搜索但未找到解决方案,有人可以告诉我为什么我遇到了细分错误吗?

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;
}

1 个答案:

答案 0 :(得分:1)

您的pos_o变量(它是指向指针变量的指针)存储1个单元的连续内存段的基地址-此处,该单元实际上是另一个存储位置的基地址。 (对于另一个内存位置,您无处分配内存。)我认为您理解这一点,因为您已经写了此行int **pos_o = malloc(sizeof(int *));-(此处您要按{{1}分配1个单位}(用于指针变量)。但是,没有任何地方为该指针变量将指向的变量分配内存。

不分配内存不是问题,但是在不分配内存的情况下引用内存位置可能会导致分段错误。

您应该有类似sizeof(int*)的内容(我建议仅将其分配给一个整数变量,因为我看到您的变量pos_o[0]=malloc(sizeof(int))始终为0,并且您仅访问一个元素)。如果您的变量k被此处未提及的某些逻辑修改,请考虑分配更多(适当数量的)内存。

here中了解有关分段错误的更多信息。

相关问题