C - 我指针的值自行改变

时间:2018-01-25 09:42:23

标签: c arrays pointers malloc

我想制作一个双数组,其大小取决于用户输入的值,但是当我的双数组在[1999]时,我得到了分段错误。

所以我决定使用指针,但问题是,我将我的值设置为0,但经过几次循环迭代后,我的值会自行改变。

这是我的代码:

int Limit = 0;
int Bomb = 0;  

int getsum(int num)
{
    int result = 0;
    while (num)
    {
        result = result + num % 10;
        num /= 10;
    }
    return result;
}

int calc_limit(int x)
{
    while ((getsum(x)) < Bomb)
        x++;

    return x;
}

int main(int argc, char **argv)
{
    Bomb = atoi(argv[1]);
    Limit = calc_limit(0);
    int i = 0;
    int j = 0;
    bool **visited;                                                                                     

    if ((visited = malloc(Limit * sizeof(bool))) == NULL)
        return;
    while (i < Limit)
    {
        if ((visited[i] = malloc(Limit)) == NULL)
            return;
        while (j < Limit)
        {
            visited[i][j] = false;
            j++;
        }
        j = 0;
        i++;
    }
    //  printf("%d\n", visited[0][0]);                                                                                 
}

因此,例如,访问[0] [0],当我设置它时等于0但突然它将变为相等的176。

我检查了这个值的变化,当i = 3时,我在第二个循环中改变了它。

我不知道为什么。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

一个问题是你没有为visited分配足够的内存。

if ((visited = malloc(Limit * sizeof(bool))) == NULL)

应该是:

if ((visited = malloc(Limit * sizeof (bool*))) == NULL)

或:

if ((visited = malloc(Limit * sizeof *visited)) == NULL)

请注意sizeof是运算符而不是函数。因此,大多数代码样式​​指针都会在sizeof及其参数之间建议一个空格。