百科问答小站 logo
百科问答小站 font logo



如果C语言程序在一台电脑上可以运行,到另外一台就运行出问题是什么原因? 第1页

  

user avatar   ke-meng-90 网友的相关建议: 
      
  1. 新手最常遇到的问题就是直接拿着debug版去别人电脑上用了, 别人电脑上没有vs或者没有相同版本的vs, 找不到debug版本依赖的库, 所以打不开.

1.5 对方可以打开你的debug版, 然而被杀毒软件杀了.

  1. 新手第二大的问题就是是release版, 但选择了错误的Runtime Library加载方式, 就是那堆什么 MT那个MD... 选择动态加载时如果对方系统没有安装特定版本的运行库则会打不开( 你要问为什么商业软件没这问题, 那是因为商业软件要么静态链接,要么在安装时把它自己依赖的运行库都给装了. )
  2. 新手第三大的问题和第二个有点相似, 就是写出来的程序本身或依赖一些第三方的dll. 加载dll要么跟程序在同目录, 要么在系统目录, 要么指定一个目录. 有些构建系统可能替用户在他的电脑上搞定了这个事了. 而他人电脑中并没有这个dll, 或者有这个dll但是版本不对. 所以打不开.
  3. 新手第四大的问题是写死了一些文件路径, 例如假定对方一定有C盘之类的操作, 又没有正确处理文件打开失败时的错误处理. 所以挂了.
  4. 新手第五大的问题是执行了一些在操作系统看来需要申请权限的操作, 例如读取注册表, 访问敏感目录等. 而却没有正确调用申请权限的方法, 而自己电脑上UAC是关闭的, 所以没发现问题. 别人电脑上UAC是开着的, 所以打不开.
  5. 新手第六大的问题是编译的是64位版本程序, 而对方电脑是32位系统.
  6. 新手第七大的问题是, 使用比较高的VS版本时, 它的运行库默认已经不支持老系统了(主要是XP). 而别人系统较老, 所以打不开.
  7. 新手第八大的问题是, 程序里可能意外调用了一些很新的系统才有的windows API或者动态调用了其他诸如intrinsic之类的玩意, 或者意外使用了非常新的CPU指令集.... 不过能到这一步基本已经不是新手了....... 为什么挂了心里应该还是有点逼数的.
  8. 当bug遇上系统版本/内存大小等等非常细微不可名状的区别时, bug的行为可能会不同, 这确实可能导致在某台机器上很容易对, 而另一台机器上不容易对. 例如我确实遇到过一个bug, 是在我的程序的某一段里有个小bug会把一个指针的特定某几位清零. 而在我电脑上运行时, 这运行到那里时那个指针总是能拿到一个地址比较固定的内存, 那被清零的几位100次里有至少95次正好本来就是0. 而另一台机器上却100次里可能只有1次能对. 我也不知道为什么, 就是这么巧.
  9. 再往后就被摧残习惯了, 就不是新手了......



  

相关话题

  是否有办法在malloc的hook函数中调用原生malloc? 
  为什么 Windows 上还没有普及 64 位的软件? 
  为什么软件要自动安装在系统盘呢? 
  C++如何返回未知类型的空引用? 
  采用32位cpu的系统,如果内存采用字编址方式能否支持更大的内存了? 
  有什么理论复杂但是实现简单的算法? 
  这个如此诡异的C语言「怪事」是怎么回事? 
  为什么说C++的main函数最后不写 return 0; 是不好的习惯? 
  大型项目中面向过程思想 vs 面向对象思想,哪种开发效率更高? 
  可以自学Python吗? 

前一个讨论
有哪些一本正经的搞笑视频?
下一个讨论
如何看待今晚的苹果手机发布会?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利