0 / 0 / 0
Регистрация: 15.01.2015
Сообщений: 1
1

Ошибка: нарушение прав доступа по адресу

05.05.2015, 20:12. Показов 411. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Очень надеюсь на вашу помощь. Пыталась написать программу, которая строит все перестановки, используя Backtracking. Построение проходит успешно, а вот при запуске появляется окно со следующим сообщением: "Необработанное исключение по адресу 0x01233979 в перестановка.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCCE1C7B0." Запускала отладчик, пометила строку, в которой подозрение на ошибку.

Код програмы:
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include<stdlib.h>
#include<conio.h>
const int MAXCANDIDATES=10;
const int NMAX=10;
int solution_count;
 
bool finished = false; 
void construct_condidates (int a[], int k, int n, int c[], int *ncandidates) 
{
    int i; /*счетчик*/
    bool in_perm[NMAX]; /*кто уже в перестановке */
    
    for (i=1; i<NMAX; i++) in_perm[i] = false;
    for (i=0; i<k; i++) in_perm[a[i]] = true;/*ПОДОЗРЕНИЕ НА ОШИБКУ*/
    *ncandidates = 0;
    for (i=1; i<=n; i++)
        if (in_perm[i] == false) 
        {
            c[ *ncandidates] = i;
            *ncandidates = *ncandidates + 1;
        }
    
}
 
//-------------------------------------
bool is_a_solution(int a[], int k, int n) 
{
    return (k==n); /*верно ли, что k==n?*/
 
}
 
//---------------------------------------
void process_solution (int a[], int k)
{
    int i;     /*счетчик*/
    for (i=1; i<=k; i++) printf ("%d",a[i]);
    printf("\n");
}
 
//---------------------------------
void backtrack (int a[], int k, int input)
{
    
    int c[MAXCANDIDATES];     /*Кандидаты на следующее место*/
    int ncandidates;          /*Количество кандидатов на следующую позицию*/
    int i;                    /*cчетчик*/
 
    if (is_a_solution(a,k,input))       /* булевая функция, проверяет, являются ли первые k элементов
                                        решением данной задачи,input - передает информацию общего характера*/ 
        process_solution(a,k);    /*учитывает, выводит или еще как-то обрабатывает полное решение
                                        после того, как оно построено*/
    else {
        k=k+1;
        construct_condidates(a,k,input,c,&ncandidates);     /*Эта подпрограмма заполняет массив с полным набором
                                                            всех возможных кондидатов на k-e место в массиве а 
                                                            при условии, что заданы перые k-1 эл.*/
        for (i=0; i<ncandidates; i++){ 
            a[k]=c[i];
            backtrack(a,k,input);
            if (finished) return;       /*досрочное завершение*/
        }
    }
}
//------------------------------------------------------------------------
 
void generate_permutations (int n) 
{
    int a[NMAX];
    backtrack(a,0,n);
    
}
 
 
int main()
{
    generate_permutations(3);
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2015, 20:12
Ответы с готовыми решениями:

Ошибка:нарушение прав доступа при записи по адресу
Помогите понять в чём ошибка. Моя программа должна заменять числа из шестнадцатиричной системы...

Ошибка: нарушение прав доступа при чтении по адресу
Код: #include &lt;SFML/Graphics.hpp&gt; int M = 3; int N = 3; int Scale = 100; int w = Scale*M;...

Ошибка 0xC0000005: нарушение прав доступа при чтении по адресу 0x3854BDD4
задание: поменять местами отрицательные элементы массива с положительными. почему то выдает ошибку?...

Необработанное исключение по адресу, нарушение прав доступа при записи по адресу
вот само задание: Авиарейсы (номер рейса, пункт назначения, время вылета, дата вылета, стоимость...

2
Эксперт PHP
4898 / 3898 / 1615
Регистрация: 24.04.2014
Сообщений: 11,403
05.05.2015, 20:28 2
Цитата Сообщение от Ю13 Посмотреть сообщение
for (i=0; i<k; i++) in_perm[a[i]] = true;/*ПОДОЗРЕНИЕ НА ОШИБКУ*/
Точно.
массив a не инициализирован, и значения в нем могут быть какими угодно.
если в 69 строчке добавить
C++
1
int a[NMAX] = {0};
то начинает работать, но что результат всегда будет верный, и нет других ошибок сказать не могу, лень разбираться
1
Эксперт .NET
5869 / 4746 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.05.2015, 20:30 3
Не знаю поможет или так задумано, но здесь
Цитата Сообщение от Ю13 Посмотреть сообщение
C++
1
2
3
4
5
6
void process_solution (int a[], int k)
{
   int i;    /*счетчик*/
   for (i=1; i<=k; i++) printf ("%d",a[i]);
   printf("\n");
}
и здесь
Цитата Сообщение от Ю13 Посмотреть сообщение
C++
1
for (i=0; i<k; i++) in_perm[a[i]] = true;/*ПОДОЗРЕНИЕ НА ОШИБКУ*/
разные значения индексов в циклах
0
05.05.2015, 20:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2015, 20:30
Помогаю со студенческими работами здесь

Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу
Помогите, пожалуйста, исправит ошибку. Необработанное исключение по адресу 0x77D88E19 (ntdll.dll)...

Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу
#include &lt;math.h&gt; const double eps = 0.001; ///&lt; желаемая точность /// N - размерность...

Вызвано исключение по адресу 0x003F2357 в Лабораторна 15.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x
Что это такое и как это исправить? Вот фрагмент кода где и есть проблема: ... int size = 9;...

Необработанное исключение по адресу 0x001B3371 в XXX.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDF
Делал консольную змейку и столкнулся вот с такой проблемой. void stena(char **arr) { int y...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru