震惊! 为什么加上调试的printf和不加, 结果居然不一样!!

P2615 [NOIP2015 提高组] 神奇的幻方

@[Tokubara](/user/251011) 应该是fill里的输出打乱了矩阵
by 听取MLE声一片 @ 2020-09-17 21:55:23


我说漏了, 如果有printf, 那么结果正确, 否则结果错误. 有printf, 输出是: ``` r=2,c=2 r=1,c=0 r=2,c=0 r=1,c=1 r=0,c=2 r=1,c=2 r=0,c=0 r=2,c=1 8 1 6 3 5 7 4 9 2 ``` 没有则是: ``` 0 7 0 9 0 0 0 0 8 ```
by Tokubara @ 2020-09-17 22:16:19


@[Tokubara](/user/251011) 我这儿看来您的代码,本地调试并没有问题
by wheneveright @ 2020-09-17 22:24:57


![您看看我的调试结果](https://cdn.luogu.com.cn/upload/image_hosting/5bmwq501.png)
by wheneveright @ 2020-09-17 22:29:11


对呀,请问楼主大大是怎么得出 ``` r=2,c=2 r=1,c=0 r=2,c=0 r=1,c=1 r=0,c=2 r=1,c=2 r=0,c=0 r=2,c=1 8 1 6 3 5 7 4 9 2 ``` 这个答案的
by ClapEcho233 @ 2020-09-17 22:32:54


的确奇怪, 我的代码是错的, 按理说就算有printf也不应该得出这样的结果. 看了各位说的, 如果我用debian虚拟机, 就不会有这样的情况. 上面的结果的平台是macos, 用gcc编译(用的是-O0选项). 也许看反汇编的结果会知道, 但是现在不太会看(而且非常长). 希望某天填上这个坑. 谢谢大家的热心帮助!
by Tokubara @ 2020-09-17 22:56:52


补充一下(为了完整性), 我的错误是在这一行: `else if(a[last_r-1][last_c-1]>0` 应该是 `else if(a[last_r-1][last_c+1]>0`
by Tokubara @ 2020-09-17 23:01:26


|