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

时间:2016-02-24 02:27:35

标签: c++ c visual-studio

  

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;
}

3 个答案:

答案 0 :(得分:1)

  1. while (!(n = -1));您可以在此删除分号,否则以下{}不会成为while循环的一部分。

  2. while (!(n = -1)); n = -1是一项分配而不是比较,它总是会被评估为true,您可能需要n == -1

    < / LI>
  3. for (int j = 0; j < 11; j++)您已离开阵列的范围,该范围应为[0; 10)。我想你想要j < 10

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你有一个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)
{