使用c编程语言中的fopen创建文件时出现此错误
NTVDM cpu遇到非法指令CS:0000 IP0075 OP:f0 00 f0 37 05 choos'接近终止操作
答案 0 :(得分:2)
当程序试图将数据作为代码执行时,通常会发生这种情况。反过来,这通常发生在某些东西践踏堆栈并覆盖返回地址时。
在这种情况下,我猜“IP0075”是指令指针,执行的非法指令位于地址0x0075。我敢打赌,这个地址没有映射到应用程序可执行代码。
与'fopen'的可能连接上的 更新:OP声明删除fopen
代码会导致问题消失。不幸的是,这并不能证明fopen
代码是导致问题的原因。例如:
删除的代码可能包含额外的局部变量,这可能意味着堆栈践踏在一种情况下命中了返回地址......而在另一种情况下,某些词将不会被使用。< / p>
删除的代码可能会导致代码段的大小发生变化,从而导致某些重要地址指向其他位置。
几乎可以肯定的是,您的应用程序已根据C标准执行了具有“未定义行为”的操作。任何事情都可能发生,并且可能没有任何意义。
调试这类问题真的很难。您应该首先运行“lint”或等效代码并修复所有警告。接下来,您应该使用一个好的调试器并单步执行应用程序以尝试查找它跳转到错误代码/地址的位置。然后再回过头来弄清楚导致它发生的原因。
答案 1 :(得分:0)
假设它确实是导致问题的fopen()调用(没有源代码很难说),你是否检查过传递给函数的2个字符指针实际上是指向正确分配的内存的指针? 也许他们没有正确初始化?
答案 2 :(得分:0)
嗯....你确实提到过NTVDM,听起来像是一个旧的16位应用程序,它在一个旧的命令窗口内崩溃,并且设置了应用程序兼容性。由于没有发布代码,因此有可能猜测它与文件有关(但是 fopen - 你怎么知道没有显示提示?)也许有一个特定的文件,是否比传统的8.3 DOS文件名约定更长,并且在尝试读取它时或者16位应用程序在一个又一个名称长于8.3的文件夹中运行时会出现问题?
希望这有帮助, 最好的祝福, 汤姆。