当我运行这段代码时,printf()
函数似乎提供了一个随机的大数字,就好像它正在调用一个超出范围的数组一样。这是怎么回事?
#include <stdio.h>
#include <math.h>
int main(void)
{
int test_num = 1000;
int factors[16];
for(int i = 1, j = 0; i < test_num; i++, j++) {
if(test_num % i == 0)
factors[j] = i;
}
printf("%d", factors[2]);
return 0;
}
答案 0 :(得分:3)
最有可能的问题是,即使您没有分配j
,您也正在递增i
。
获得的因子顺序是1、2、4、5、8、10...。您可能希望将这些因子分配给索引0-5(含),而不是0、1、3、4。 7、9等
如下更改循环:
for(int i = 1, j = 0; i < test_num && j < 16; i++) {
if(test_num % i == 0) {
factors[j] = i;
j++;
}
}
要点仅是在j
符合您的条件时递增i
。您还想确保您不会超出范围(&& j < 16
)。
答案 1 :(得分:0)
如果在循环中打印出j
和j
,请注意factors[2]
永远不会是2。
因此,MariaDB [(none)]> SELECT GET_LOCK('lock1', 10);
+-----------------------+
| GET_LOCK('lock1', 10) |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.000 sec)
从未被初始化,因此您将打印出垃圾邮件。
答案 2 :(得分:0)
当j == 2
,i == 3
和1000 % 3
不等于0时,它等于1。未通过您的if
语句条件。因此factors[2]
将是未定义的(因为您没有初始化数组)。因此数量众多。