Strange#0

Written by    15:19 December 12, 2014 

Update0

刚刚才发现在另外一台电脑上面, 同样的程序, 同样的数据, 代码却是在pilecount == 33, i == 4的时候出现Segment Fault, 并且i最终变成的是18474…

Update1

首先是这个地方发现了问题, 字符数组是不可以这么返回的, 不过这个只是造成了程序运行结果的错误, 跟之前的Segment Fault没有关系.

另外问题就好像出现在strcpy上面, 把strcpy换成了自己构造的函数过后i值就没有出现异样.

后期自己构造的函数:

Update2

突然发现是自己犯了一个非常低级的错误…

明明是需要储存两个字符的字符数组我却只分配了两个单位, 完全没有考虑’\0’君的感受, 然后应该就是strcpy君找不到’\0’君引发的一系列字节混乱, 然后就波及到了i君…


刚才在刷Uvaoj的时候的又写出了一段奇怪的代码, 这一次我不想像以前那样直接把代码全部推掉然后重新写过, 所以先在这里记录一下.

题目说明以及最终解题报告见 UVAOJ127

代码如下:

这段代码在直接运行的时候会报Segment Fault, 然后我使用gdb调试发现出错点在循环到pilecount == 39, 其中的for到了i == 6, 代码运行到86行

的时候i会十分诡异地由6变成21313, 进而导致运行到后面的时候程序会出现栈溢出的情况, 这里的关键点就在于出错代码段明明对i没有任何操作但是i的值却突然发生变化…

实在是难以想通…

Category : feeling

Tags :