Нарушение прав доступа при чтении "0xa99e99d8" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

При компиляции программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define BOOL    int
#define TRUE    1
#define FALSE   0
 
int Qsort(int left, int right,int* a)           //сортировка из методички по лабам :=)
{
    int index = 0;                              //количество стравнений
    int i, j, key, buf;
    key = a[(left + right)/2];
    i = left;
    j = right;
    do 
    {
        while (a[i] < key)
        {
            i++;
            index++;
        }
        while (key < a[j])
        {
            j--;
            index++;
        }   
        if (i <= j)
        {
            buf = a[i];
            a[i] = a[j];
            a[j] = buf;
            i++;
            j--;
        }
    } while (i <= j);
    if (left < j)
        index += Qsort(left, j, a);
    if (i < right)
        index += Qsort(i,right, a);
    return index;
}
 
int main()
{
    int n, p, K, *mas,index,i;                                                  //размер массива
    printf_s("processing results in files antiqs.in and antiqs.out\n");
    freopen("antiqs.in","r",stdin);                                             //направляем поток в файл
    freopen("antiqs.out","w",stdout);
    scanf("%i",&n);                                                             //максимальный элемент                                          
    mas = (int*)malloc((n+1)*sizeof(int));
    mas[0] = 1;
    for (K = 0; K <= n; K++)                                                    //генерируем последовательность, которая будет хуже всего для сортировки
    {               
        p = (1 + K) / 2;
        mas[K] = mas[p];
        mas[p] = K;
    }
    for (i = 0;i<n;++i)
        printf("%d ",mas[i]);
    index = Qsort(0,n,mas);
    free(mas);
    while(TRUE);
    return NULL;
}
Microsoft Visual Studio 2010 выдает следующее сообщение " Необработанное исключение в "0x01171403" в "e.exe": 0xC0000005: Нарушение прав доступа при чтении "0xa99e99d8". " Хотя компиляция вроде бы проходит.... Скажите пож-ста, почему может появляться такое сообщение.. Заранее спасибо

Решение задачи: «Нарушение прав доступа при чтении "0xa99e99d8"»

textual
Листинг программы
int main()
 
{
        int n; 
        int  p, K, *mas,index,i;  
        freopen("antiqs.in","r",stdin);                                                                                         //направляем поток в файл
        freopen("antiqs.out","w",stdout);
        scanf("%i",&n);                                                                                                                         //максимальный элемент                                                                                  
         mas = (int *) malloc(n * sizeof(int));
        if (mas == NULL)
        return 1;
         mas[0] = 1;
         for (K = 0; K < n; K++)                                                                                                   //генерируем последовательность, которая будет хуже всего для сортировки
        {                               
                p = (1 + K) / 2;
                mas[K] = mas[p];
                mas[p] = K;
        }
        index = Qsort(0, n, mas);
    for (i = 0; i < n; ++i)
        printf("%d ", mas[i]);
 
        free(mas);
        getchar();
        getchar();
        return 0;
}

Объяснение кода листинга программы

  1. Объявлены переменные: n - количество элементов в массиве; p, K, *mas,index,i - указатели на переменные;
  2. Открыты файлы antiqs.in и antiqs.out для чтения и записи соответственно.
  3. Считано значение переменной n с помощью функции scanf.
  4. Выделена память под массив mas с помощью функции malloc. Если память не может быть выделена, то возвращается 1.
  5. Первый элемент массива установлен в 1.
  6. В цикле K генерируется последовательность для сортировки, которая будет хуже всего для сортировки.
  7. В цикле i происходит сортировка массива с помощью функции Qsort.
  8. В цикле i выводятся элементы массива с помощью функции printf.
  9. Выделенная память освобождается с помощью функции free.
  10. Программа ожидает ввода с клавиатуры с помощью функции getchar.
  11. Программа завершается с возвратом значения 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы