Нарушение прав доступа при чтении "0xa99e99d8" - C (СИ)
Формулировка задачи:
При компиляции программы
Microsoft Visual Studio 2010 выдает следующее сообщение
" Необработанное исключение в "0x01171403" в "e.exe": 0xC0000005: Нарушение прав доступа при чтении "0xa99e99d8". "
Хотя компиляция вроде бы проходит....
Скажите пож-ста, почему может появляться такое сообщение..
Заранее спасибо
#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; }
Решение задачи: «Нарушение прав доступа при чтении "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; }
Объяснение кода листинга программы
- Объявлены переменные: n - количество элементов в массиве; p, K, *mas,index,i - указатели на переменные;
- Открыты файлы
antiqs.in
иantiqs.out
для чтения и записи соответственно. - Считано значение переменной n с помощью функции scanf.
- Выделена память под массив mas с помощью функции malloc. Если память не может быть выделена, то возвращается 1.
- Первый элемент массива установлен в 1.
- В цикле K генерируется последовательность для сортировки, которая будет хуже всего для сортировки.
- В цикле i происходит сортировка массива с помощью функции Qsort.
- В цикле i выводятся элементы массива с помощью функции printf.
- Выделенная память освобождается с помощью функции free.
- Программа ожидает ввода с клавиатуры с помощью функции getchar.
- Программа завершается с возвратом значения 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д