Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 23.02.2011
Сообщений: 34
1

Нарушение прав доступа при чтении "0xa99e99d8"

08.03.2011, 22:09. Показов 2649. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При компиляции программы

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#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". "
Хотя компиляция вроде бы проходит....

Скажите пож-ста, почему может появляться такое сообщение..
Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2011, 22:09
Ответы с готовыми решениями:

Нарушение прав доступа при чтении
Список. Не могу разобраться с двумя функциями, компилятор не находит синтаксических ошибок, а во...

Нарушение прав доступа при чтении Си
В общем, стабильно решаю 1 проблему и получаю 2 новых. В конце при вводе товара для поиска выходит...

Нарушение прав доступа при чтении
Не знаю почему-то начало вылазить эта ошибка &quot;нарушение прав доступа при чтении по адресу...

Нарушение прав доступа при чтении по адресу
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf #include &lt;stdio.h&gt;...

Нарушение прав доступа при чтении по адресу
Ошибку ловлю, когда пытаюсь как-либо взаимодействовать с новыми элементами массива, которые должны...

17
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
08.03.2011, 23:06 2
Значит где-то лезете не в ту область памяти, вот и нарушение прав доступа. Смотрите код, дебажте по шагам.
0
0 / 0 / 1
Регистрация: 23.02.2011
Сообщений: 34
08.03.2011, 23:31  [ТС] 3
Спасибо большое.
Проверил в программе дошло до сортировки массива. и на строке key = a[(left + right)/2]; зависла.
Но вот как от этой ошибки избавится я так и не решил.
Заранее спасибо.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.03.2011, 05:19 4
было
C
1
2
3
    mas = (int*)malloc((n+1)*sizeof(int));
    mas[0] = 1;
    for (K = 0; K <= n; K++)
стало
C
1
2
3
4
5
    mas = (int *) malloc(n * sizeof(int));
    if (mas == NULL)
        return 1;
    mas[0] = 1;
    for (K = 0; K < n; K++)
было
C
1
2
3
    for (i = 0;i<n;++i)
        printf("%d ",mas[i]);
    index = Qsort(0,n,mas);
стало
C
1
2
3
    index = Qsort(0, n, mas);
    for (i = 0; i < n; ++i)
        printf("%d ", mas[i]);

и это
C
1
return NULL;
C
1
return 0;
0
0 / 0 / 1
Регистрация: 23.02.2011
Сообщений: 34
09.03.2011, 12:07  [ТС] 5
Исправил, но все равно ошибку выдает. Неужели не кто не поможет.
0
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
09.03.2011, 12:25 6
Спасибо большое.
Проверил в программе дошло до сортировки массива. и на строке key = a[(left + right)/2]; зависла.
Но вот как от этой ошибки избавится я так и не решил.
Заранее спасибо.
Скорее всего вылетает за границы массива.
Считываете ли вы значение n? (Создан ли файл antiqs.in в котором введено нужное значение n)

Не понял зачем в конце
C
1
while(TRUE);
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
09.03.2011, 12:55 7
Цитата Сообщение от александрз Посмотреть сообщение
key = a[(left + right)/2]
скорее всего неправильные left,right
в результате выбрасывает за пределы массива
сейчас компильну программу проверю

Добавлено через 14 минут
C++
1
2
3
freopen("antiqs.in","r",stdin);                                                                                         //направляем поток в файл
        freopen("antiqs.out","w",stdout);
        scanf("%i",&n);
у тебя эти файлы точно есть ???
если нет то n неинициализированая = выход за границы
прежде чем использовать обнули

Добавлено через 13 минут
C++
1
2
3
  //      freopen("antiqs.in","r",stdin);                                                                                         //направляем поток в файл
    //    freopen("antiqs.out","w",stdout);
        scanf("%i",&n);
я закоментировал строки т.е. ввод и вывод с консоли
и все заработало
PS
отсортированный массив тоже не плохо бы вывести
1
0 / 0 / 1
Регистрация: 23.02.2011
Сообщений: 34
09.03.2011, 13:24  [ТС] 8
Мне нужно написать прогу как раз что бы считывала с файла antiqs.in и результат выводило в antiqs.out
в файле antiqs.in массив (уравнение для k -числа есть). в antiqs.out число которое является k-ым в массиве.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
09.03.2011, 13:41 9
Цитата Сообщение от александрз Посмотреть сообщение
antiqs.in массив
какой такой массив-пассив у тебя только один scanf ввод размера массива
вот он то и не считывает(не находит файл?, неправильный формат? )
из-за этого летит программа
во первых
int n=0;
это обезопасит от неициализированой переменной
во вторых

FILE *freopen(
const char *path,
const char *mode,
FILE *stream
);
проверяй возвращаемые значения
в третих
scanf("%i",&n);
проверяй введенное значение
в четвертых
mas = (int*)malloc((n+1)*sizeof(int));
проверяй выделилась ли память
примерно вот столько проверок нужно чтобы программа не вылетала
если какой нибудь введет -100 к примеру.

quote=александрз;1432999]результат выводило в antiqs.out[/quote]

Цитата Сообщение от александрз Посмотреть сообщение
for (i = 0;i<n;++i)
printf("%d ",mas[i]);
index = Qsort(0,n,mas);
free(mas);
тут выводится неотсортированый массив, после сортировки ничего не выводится

Цитата Сообщение от александрз Посмотреть сообщение
в antiqs.out число которое является k-ым в массиве.
этого вообше не увидел
0
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
09.03.2011, 13:41 10
Мне нужно написать прогу как раз что бы считывала с файла antiqs.in и результат выводило в antiqs.out
в файле antiqs.in массив (уравнение для k -числа есть). в antiqs.out число которое является k-ым в массиве.
Создал файл, ввел 5 в нем, вывело в другой файл массив...

Могли бы вы показать как у вас устроен файл antiqs.in ?
Может первое в нем это не число?
1
0 / 0 / 1
Регистрация: 23.02.2011
Сообщений: 34
09.03.2011, 13:43  [ТС] 11
В первой строке 2числа. Размер массива и нужный номер элемента.
В второй строке числа a b c x1 x2. Формула для получения следующих чисел a*xi-2+b*xi-1+c=xi
i индекс элемента

Добавлено через 1 минуту
заранее спасибо
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
09.03.2011, 13:48 12
посмотри нет ли у тебя такого
warning C4996: 'freopen': This function or variable may be unsafe. Consider using freopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
0
0 / 0 / 1
Регистрация: 23.02.2011
Сообщений: 34
09.03.2011, 14:52  [ТС] 13
Цитата Сообщение от ValeryS Посмотреть сообщение
посмотри нет ли у тебя такого
нету такого

Добавлено через 57 минут
Так в чём проблема так и не понятно...,
помогите решить пож-ста..
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
09.03.2011, 16:09 14
Я ж тебе объяснил
Цитата Сообщение от ValeryS Посмотреть сообщение
n неинициализированая
т.е из файла не считывается нормальное значение
в результате выход за границы массива
пройди еще раз отладчиком и посмотри какое значение n
после
Цитата Сообщение от александрз Посмотреть сообщение
scanf("%i",&n);
кстати

Цитата Сообщение от александрз Посмотреть сообщение
При компиляции программы
неправильно. Компиляция проходит нормально
ошибка при выполнении
0
0 / 0 / 1
Регистрация: 23.02.2011
Сообщений: 34
09.03.2011, 17:12  [ТС] 15
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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;
}
Всё равно не работает..
Всё ли правильно я сделал...?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
09.03.2011, 18:02 16
Цитата Сообщение от александрз Посмотреть сообщение
antiqs.in
Посмотри где у тебя лежит этот файл
он должен лежать в директории проекта в папке Debug(папке где появится exe-шник)
иначе он его не найдет
или прописывай полный путь

Цитата Сообщение от александрз Посмотреть сообщение
Всё ли правильно я сделал...?
нет

C++
1
2
if(freopen("antiqs.in","r",stdin)==NULL)
    printf("No file");
и тогда поймешь перенаправляется у тебя поток(найден файл) или нет
scanf("%i",&n);
C++
1
2
if(n<0 )
   return ;
Добавлено через 16 минут
надабал пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
  FILE *fp;
 
  printf("Это сообщение появится на экране.\n");
 
  if((fp=freopen("OUT", "w" ,stdout))==NULL) {
    printf("Не удается открыть файл.\n");
    exit(1);
  }
 
  printf("Это сообщение будет записано в файл OUT.");
 
  fclose(fp);
 
  return 0;
}
1
0 / 0 / 1
Регистрация: 23.02.2011
Сообщений: 34
09.03.2011, 18:10  [ТС] 17
Цитата Сообщение от ValeryS Посмотреть сообщение
Посмотри где у тебя лежит этот файл
он должен лежать в директории проекта в папке Debug(папке где появится exe-шник)
иначе он его не найдет
или прописывай полный путь
Данную прогу я должен отправить в систему автоматической проверки...
и скорее всего, если я пропишу полный путь система этого не распознает..
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
10.03.2011, 03:38 18
просто сортирует
Вложения
Тип файла: zip antiqs.zip (1.0 Кб, 11 просмотров)
0
10.03.2011, 03:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2011, 03:38
Помогаю со студенческими работами здесь

Ошибка Нарушение прав доступа при чтении
Вот код на Pure C: #include &lt;stdio.h&gt; void getchrs(int a); int ceven(int a); main(void){ int...

Нарушение прав доступа при чтении по адресу
Здраствуйте, задано переписать функцию strspn(canst char *s1, const char *s2) так чтоб она искала...

0xC0000005: нарушение прав доступа при чтении по адресу 0x00000003
Доброго времени суток!Возникла проблема при вводе в консоль массива , после ввода элементов консоль...

Нарушение прав доступа при чтении при работе с большим массивом
Здравствуйте. Пытаюсь заполнить большой массив, вроде правильно объявил его, но на разных итерациях...

Программа тасовки колоды карт: Нарушение прав доступа при чтении по адресу
Всем доброго времени суток. Помогите найти ошибку. Ни на что не ругается, просто выдает ошибку. ...

Нарушение прав доступа при чтении по адресу при создании массива с достаточно узким диапазоном значений элементов
никак не могу понять как исправить это ну или просто не знаю, буду очень благодарен если поможете....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru