c运行时错误消息

c运行时错误消息,c,C,在c编程语言中使用fopen创建文件时出现此错误 NTVDM cpu遇到非法指令CS:0000 IP0075 操作:f0 00 f0 37 05选择“关闭”以终止操作 当程序试图以代码形式执行数据时,通常会发生这种情况。反过来,这种情况通常发生在某些内容破坏堆栈并覆盖返回地址时 在本例中,我猜“IP0075”是指令指针,执行的非法指令位于地址0x0075。我打赌这个地址没有映射到应用程序的可执行代码 更新与“fopen”的可能连接:OP声明删除fopen代码会使问题消失。不幸的是,这并不能证明f

在c编程语言中使用fopen创建文件时出现此错误

NTVDM cpu遇到非法指令CS:0000 IP0075 操作:f0 00 f0 37 05选择“关闭”以终止操作


当程序试图以代码形式执行数据时,通常会发生这种情况。反过来,这种情况通常发生在某些内容破坏堆栈并覆盖返回地址时

在本例中,我猜“IP0075”是指令指针,执行的非法指令位于地址0x0075。我打赌这个地址没有映射到应用程序的可执行代码

更新与“fopen”的可能连接:OP声明删除
fopen
代码会使问题消失。不幸的是,这并不能证明
fopen
代码是问题的原因。例如:

  • 被删除的代码可能包含额外的局部变量,这可能意味着堆栈践踏在某种情况下击中了返回地址。。。在另一种情况下,一些不会被使用的词

  • 删除的代码可能会导致代码段的大小发生变化,从而导致某些重要地址指向其他地方

问题几乎可以肯定的是,您的应用程序按照C标准做了一些“未定义的行为”。任何事情都有可能发生,而且很可能是毫无意义的


调试此类问题可能非常困难。您可能应该首先在代码上运行“lint”或等效代码,并修复所有警告。接下来,您可能应该使用一个好的调试器并单步运行应用程序,试图找到跳转到错误代码/地址的位置。然后回过头来找出是什么导致了这种情况。

假设是fopen()调用导致了问题(如果没有源代码很难说),您是否检查过传递给函数的两个字符指针实际上是指向正确分配的内存的指针?
可能它们没有正确初始化

Hmmm。。。。您确实提到了NTVDM,它听起来像是一个旧的16位应用程序,不知怎的,在一个设置了应用程序兼容性的旧命令窗口中崩溃了。由于没有发布任何代码,因此有可能猜测这与文件有关(但fopen-在没有显示任何提示的情况下,您如何知道这一点?)也许有一个特定的文件比传统的8.3 DOS文件名约定要长,当试图读取它时它会崩溃,或者16位应用程序运行在一个名称再次超过8.3的文件夹中

希望这有帮助, 顺致敬意,
Tom。

你怎么知道这与你的fopen()调用有关?Occam的剃刀表明fopen()不是罪魁祸首。非法指令可能是由损坏的堆栈框架造成的。我不认为Occam的razor是以这种方式应用的。Sama,请发布您的代码!(编辑您的问题以粘贴它)如果您的代码在没有fopen()的情况下正确运行,那么fopen()首先是不必要的:)但是fopen非常重要,我需要它来将数据保存到文件中