C - 我的指针的值自行改变

标签 c arrays pointers malloc

我想创建一个 double 组,其大小取决于用户输入的值,但是当我的 double 组在 [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]);                                                                                 
}

例如,visited[0][0],当我设置它时等于 0,但突然它会变成等于 176。

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

我不知道为什么。

感谢您的帮助

最佳答案

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

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

应该是:

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

或者:

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

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

关于C - 我的指针的值自行改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48439777/

相关文章:

c - 如何用opengl在墙上打洞

c# - 关于c#中数组的初学者问题

javascript - 在哪里可以找到有关 JavaScript 中对象内数组行为的信息?

arrays - 如何在 Ruby 中手动将整数转换为 IP 地址

c - 为什么这个程序中的arr与*arr相同?

c - 试图理解 C 中的函数指针

c - 在 c 的终端中没有出现预期的输出

c - 类型 'char *' 但参数的类型为 'char' 并且数据未打印到文件

c++ - 最简单的 “error: taking the address of a temporary object”修复程序?

c - 如何在 C 中初始化静态指针?