我查看了逻辑和预期的输出,它们之间没有相关性.如果它在3台计算机中的2台上运行,那肯定不是逻辑错误.
当我让教授根据学校的计算机标记作业时,他不同意并对现实世界大肆宣传,如果它只在一台计算机上不起作用,我的程序就会出错.
所以我想问现实世界的专业人士他们会在这种情况下做些什么?如果程序没有提供给您的工具用于测试目的,您如何调试程序?也就是说,如果客户报告了您无法自行复制的错误,您可以做什么?或者你如何复制这个bug?
仅供参考,我的电脑是Windows,学校的电脑是linux,教授的电脑是Mac.
解决方法
I looked at the logic and the expected output and there is no correlation between them. Surely it is not a logic error if it is running on 2 out of 3 computer.
欢迎来到未定义的行为:不幸的是,您的程序在两台(或两千台)计算机上产生正确结果的事实证明什么都没有.语言标准试图为编译器设计者提供尽可能多的自由优化,以便C程序的效率可以与使用汇编语言编写的程序保持竞争.不幸的是,这为平台之间的不兼容留下了很大的空间:不同的编译器和执行环境会对带有错误的程序产生截然不同的结果.最糟糕的是,带有错误的程序可能会产生您可能在某些平台上合理预期的行为,并在其他平台上惨败!
防止未定义行为的唯一方法是编写正确的程序.编译器通过在他们认为可能发生未定义行为的地方产生警告来合理地帮助您.打开最精细级别的所有警告,编译程序,并修复编译器报告的所有警告.有可能,一些警告会解释计算机输出与教授计算机之间的差异.
要跟踪高级错误,请使用valgrind.此程序将帮助您检测与内存相关的问题,例如写入已分配的区域,使用已释放的内存,多次释放相同的内存块,等等.