尝试运行非常简单的程序时访问冲突

Posted

技术标签:

【中文标题】尝试运行非常简单的程序时访问冲突【英文标题】:Access violation when trying to run a very simple program 【发布时间】:2016-02-24 02:27:35 【问题描述】:

“HW2_1_JM.exe 中 0x0F29F365 (msvcr120d.dll) 处的未处理异常: 0xC0000005:访问冲突读取位置0xFFFFFFFF。”

这是我的第一篇文章,这是我尝试运行此程序时经常遇到的错误。我是编程新手,所以我对我的代码质量感到抱歉。当它没有抛出这个错误时,它只是在一段时间之前无休止地暂停。我们认为错误在于int d,因为当我们尝试同时打印nd 时,我们在打印n 后再次出现错误。

int main()

   int a[10];
   puts("Please input a value: \n");
   int n;
   scanf("%i", &n);
   printf("\n you chose: %i\n", n);
   puts("Please input a base value, between 1 and 11: \n");
   int d;
   scanf("%i", &d);

   while (!(n = -1));
   
      int q = n;
      int k = 0;
      printf(q);
      while (q != 0);
      
         a[k] = (q % d);
         q = q / d;
         printf(q);
         k++;
      
      for (int j = 0; j < 11; j++)
      
         printf("Element [%d] = %d \n", j, a[j]);
      
      puts("Please input a value: \n");
      scanf("%i", &n);
      printf("\n you chose: %i\n", n);
      puts("Please input a base value, between 1 and 11: \n");
      scanf("%i", &d);
   
   system("pause");
   return 0;

【问题讨论】:

while (!(n = -1));。单个等号和分号看起来很可疑。 这是c还是c++?将printf(q) 更改为printf("%d\n", q) 哦,谢谢!我忘了那个。当我将其更改为“==”时,循环仍然没有启动。它只是在接受“d”的值后停止。它不再抛出错误,但我必须 X 退出 cmd 提示符。 @NickyC update 我改变了“printf(q);”到 "printf("%d\n", q);"并没有看到任何变化。我的调试窗口仍然显示“无法找到或打开 PDB 文件”并显示“程序 ___ 已退出,代码为 -1073741510”@BarmakShemirani 这对我来说就像C。另外,如果有人在d 中输入了0,你的程序将会失败。 【参考方案1】:

printf 的签名是 int printf ( const char * format, ... ); 您的电话 printf(q) 其中 q 是 int

【讨论】:

【参考方案2】:

    while (!(n = -1)); 此处可以去掉分号,否则后面的 将不会成为while 循环的一部分。

    while (!(n = -1));n = -1 是一个赋值而不是一个比较,它总是被评估为true,你可能想要n == -1

    for (int j = 0; j &lt; 11; j++) 你超出了数组的范围,应该是 [0; 10)。我想你想要j &lt; 10

可能还有其他问题。您应该尝试使用调试器来找出实际的错误。

【讨论】:

【参考方案3】:

您有一个 10 项数组,但尝试读取 11 个元素(0 到 10)。将循环更改为:

for (int j = 0; j < 10; j++)
  
     printf("Element [%d] = %d \n", j, a[j]);
  

另外,这是错误的:

while (!(n = -1));

当您想要进行比较时,您正在做作业。你有一个错误的;。你的代码应该是

while (n != -1)

【讨论】:

哇,这是一个很好的观点。我以为我在补偿数组大小,但我不是真的。我用推荐的修复程序更新了代码,它可以工作了!嗯......它有一些逻辑错误,比如我的数组充满了一些非常长的负数,但这是进步。感谢大家的快速响应! @JeremyMorgan 很高兴为您提供帮助!如果其中任何一个对您有帮助,请记得选择一个答案。

以上是关于尝试运行非常简单的程序时访问冲突的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 错误“冲突类型”为一个非常简单的函数运行 C 代码

运行循环时 MASM x86 访问冲突

运行使用 /clr 构建的 DLL 的本机 C++ 应用程序时访问冲突

Qt 5.5 和 OpenGL:尝试调用 paintGL() 时引发读取访问冲突异常

简单的 DirectX 11 程序运行时错误

forrtl:严重(157):程序异常 - 访问冲突