Исключение, созданное в 0x796BF2F0. Не понимаю, как это исправить

#c

#c

Вопрос:

Я получаю сообщение об ошибке «Исключение, созданное в 0x796BF2F0 (ucrtbased.dll ) в главе 14.exe : 0xC0000005: местоположение чтения 0x00000000 с нарушением доступа.» Как мне это исправить?? Я помещаю внутрь кода, где я получаю ошибку. Я не знаю, как это исправить или исправить. Если бы кто-нибудь мог мне помочь, это было бы фантастически!

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

//initialize main

int main(int argc, char* argv[])

{

    //define variables

    int size = 10;
    int numArray[10];

    int i, j;
    int temp;
    srand((unsigned)time(0));

    //to generate 10 random numbers in the array

    for (i = 0; i < size; i  )

    {

        //generate random values between 1 to 100
        //store numbers in variable numArray

        numArray[i] = 1   rand() % 100;

    }

    //sort array based on entry

    // if argument is -a or -A sort ascending

    if ((strcmp(argv[1], "-a") == 0) || (strcmp(argv[1], "-A") == 0)) {

        //This Logic will Sort the Array of elements in Ascending order
        for (i = 0; i < size; i  ) {
            for (j = i   1; j < size; j  ) {
                if (numArray[i] > numArray[j]) {
                    temp = numArray[i];
                    numArray[i] = numArray[j];
                    numArray[j] = temp;
                }
            }
        }

    }

    //if argument is -d or -D
    else if ((strcmp(argv[1], "-d") == 0) || (strcmp(argv[1], "-D") == 0)) ***I have the error here***

    {
        //This Logic will Sort the Array of elements in Ascending order
        for (i = 0; i < size; i  ) {
            for (j = i   1; j < size; j  ) {
                if (numArray[i] < numArray[j]) {
                    temp = numArray[i];
                    numArray[i] = numArray[j];
                    numArray[j] = temp;
                }
            }
        }

    }

    //print stored array

    printf("nnThe sorted array is: n");

    //loop to print every element of array

    for (i = 0; i < size; i  )

    {

        //Display output
        printf("%dt", numArray[i]);

    }
    return 0;

}
 

Комментарии:

1. Передаете ли вы ему какие-либо параметры командной строки? Вы должны проверить argc в первую очередь.

2. OT: комментарии вроде //initialize main и //define variables довольно бессмысленны.

Ответ №1:

Вы вызываете программу без параметров командной строки, поэтому argv[1] это NULL и, следовательно strcmp(argv[1], ... , сбой.

Измените свой код следующим образом:

 ...
int main(int argc, char* argv[])
{
  if (argc < 2)
  {
    printf("Not enough command line argumentsn");
    exit(EXIT_FAILURE);
  }

  //define variables
  ...
 

и вызовите программу с соответствующими параметрами командной строки.