我想制作一个双数组,其大小取决于用户输入的值,但是当我的双数组在[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时,我在第二个循环中改变了它。
我不知道为什么。
感谢您的帮助
答案 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
及其参数之间建议一个空格。