Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Penelent
Заблокирован
#1

Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу - C++

18.01.2016, 10:39. Просмотров 2024. Ответов 32
Метки нет (Все метки)

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
#include <math.h>
const double eps = 0.001; ///< желаемая точность 
 
/// N - размерность матрицы; A[N][N] - матрица коэффициентов, F[N] - столбец свободных членов,
/// X[N] - начальное приближение, ответ записывается также в X[N];
void Jacobi(int N, double** A, double* F, double* X)
{
    double* TempX = new double[N];
    double norm; // норма, определяемая как наибольшая разность компонент столбца иксов соседних итераций.
 
    do {
        for (int i = 0; i < N; i++) {
            TempX[i] = F[i];
            for (int g = 0; g < N; g++) {
                if (i != g)
                    TempX[i] -= A[i][g] * X[g];
            }
            TempX[i] /= A[i][i];
        }
        norm = fabs(X[0] - TempX[0]);
        for (int h = 0; h < N; h++) {
            if (fabs(X[h] - TempX[h]) > norm)
                norm = fabs(X[h] - TempX[h]);
            X[h] = TempX[h];
        }
    } while (norm > eps);
    delete[] TempX;
}
 
int main()
{
    const int N = 3;
    double A[N][N] = { { 5, -4, -1 }, { 4, 1, -2 }, { 3, 1, -5 } };
    double F[N] = { -2, 8, 10 };
    double X[N] = { 0 };
    Jacobi(N, (double**)A, F, X);
}
при выполнении кода выбивает ошибку на 16 строке
Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу
Добавлено через 32 секунды
з.ы. код взят отсюда
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2016, 10:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу (C++):

Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC - C++
Программа толком не написан, проверял ранд и возникли проблемы. Ф-ция ранд генерирует одно и тоже число, но если убрать srand(time(0));,...

Вызвано исключение по адресу 0x01361A1E в Matrix 1.0.exe: 0xC0000005: нарушение прав доступа при записи - C++
Вызвано исключение по адресу 0x01361A1E в Matrix 1.0.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCDCDCDCD. Если для...

Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09 - C++
Необработанное исключение по адресу 0x00105FD7 в Динамические структуры.exe: 0xC0000005: нарушение прав доступа при чтении по адресу...

Необработанное исключение по адресу 0x008B94C5. 0xC0000005: нарушение прав доступа при чтении по - C++
Здравствуйте! Функция должна искать локальные минимумы массива. То есть это элементы,которые меньше своих соседей. Дело в том,что функция...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Penelent
Заблокирован
18.01.2016, 12:14  [ТС] #16
а сейчас?
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
#include <math.h>
#include <vector>
 
void Jacobi(const std::vector<std::vector<double>> &A, const std::vector<double> &F, std::vector<double> &X, double eps)
{
    size_t N = A.size();
    std::vector<double> TempX(N, 0);
    double norm(0.0);
 
    do {
        for (int i = 0; i < N; i++) {
            TempX[i] = F[i];
            for (int g = 0; g < N; g++) {
                if (i != g)
                    TempX[i] -= A[i][g] * X[g];
            }
            TempX[i] /= A[i][i];
        }
        norm = fabs(X[0] - TempX[0]);
        for (int h = 0; h < N; h++) {
            if (fabs(X[h] - TempX[h]) > norm)
                norm = fabs(X[h] - TempX[h]);
            X[h] = TempX[h];
        }
    } while (norm > eps);
}
 
int main()
{
    std::vector<std::vector<double>> A{ { 5, -4, -1 },{ 4, 1, -2 },{ 3, 1, -5 } };
    std::vector<double> F{ -2, 8, 10 };
    std::vector<double> X(3, 0);
    Jacobi(A, F, X, 0.001);
}
почему у меня в X какая то вообще хрень выходит?
0
Миниатюры
Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу  
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 724
18.01.2016, 12:42 #17
Цитата Сообщение от Penelent Посмотреть сообщение
почему у меня в X какая то вообще хрень выходит?
У тебя, в do while(), norm растёт
0
Penelent
Заблокирован
18.01.2016, 12:54  [ТС] #18
Цитата Сообщение от nord_v Посмотреть сообщение
У тебя, в do while(), norm растёт
в каком месте? там везде только присвоения, роста нет, да и вообще алгоритм с википедии, врятли там не правильно сделали
0
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 724
18.01.2016, 13:52 #19
Цитата Сообщение от Penelent Посмотреть сообщение
в каком месте?
Перед while (norm > eps) выведи на консоль значение norm и посмотри, что с ним происходит.
0
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 724
18.01.2016, 13:56 #20
У меня, вот что выводит.
0
Миниатюры
Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу  
Penelent
Заблокирован
18.01.2016, 14:00  [ТС] #21
Цитата Сообщение от nord_v Посмотреть сообщение
У меня, вот что выводит.
что это?
0
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 724
18.01.2016, 14:03 #22
Цитата Сообщение от Penelent Посмотреть сообщение
что это?
Вот это:
Цитата Сообщение от nord_v Посмотреть сообщение
Перед while (norm > eps) выведи на консоль значение norm
Вот так сделай:
C++
1
2
3
//.........
          cout << norm << endl;
    } while (norm > eps);
0
Penelent
Заблокирован
18.01.2016, 14:05  [ТС] #23
nord_v, ну допустим, ну и что? значит в вики неверный алгоритм? поможешь исправить?
0
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 724
18.01.2016, 14:08 #24
Цитата Сообщение от Penelent Посмотреть сообщение
ну допустим, ну и что?
То, что norm должен уменьшаться, а не расти безгранично (там переполнение наступает).
Цитата Сообщение от Penelent Посмотреть сообщение
значит в вики неверный алгоритм?
Я его не видел.
Цитата Сообщение от Penelent Посмотреть сообщение
поможешь исправить?
Нет, неинтересно.
0
_Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
18.01.2016, 14:10 #25
Цитата Сообщение от Penelent Посмотреть сообщение
да и вообще алгоритм с википедии, врятли там не правильно сделали
на счет святости вики:
Очередная сортировка пузырьком
0
Penelent
Заблокирован
18.01.2016, 14:13  [ТС] #26
Цитата Сообщение от nord_v Посмотреть сообщение
То, что norm должен уменьшаться, а не расти безгранично (там переполнение наступает).
вот и мне так кажется...
Цитата Сообщение от nord_v Посмотреть сообщение
Я его не видел.
я же кидал ссылку
Цитата Сообщение от Penelent Посмотреть сообщение
код взят отсюда
0
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 724
18.01.2016, 14:20 #27
Цитата Сообщение от Penelent Посмотреть сообщение
я же кидал ссылку
Там другой код (тот может и работает, а может и нет).

Добавлено через 3 минуты
Может у тебя входные данные неправильные.
0
Penelent
Заблокирован
18.01.2016, 14:32  [ТС] #28
Цитата Сообщение от nord_v Посмотреть сообщение
Там другой код (тот может и работает, а может и нет).
я ничего не менял кроме способа передачи массивов
Цитата Сообщение от nord_v Посмотреть сообщение
Может у тебя входные данные неправильные.
как так может быть? разве туда не рандомно подавать можно? ну так или иначе я брал данные с примера какого то

Добавлено через 4 минуты
а вот здесь как будто бы работает, не пересчитывал, но по крайней мере какие то иксы возвращает
0
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,029
Записей в блоге: 1
18.01.2016, 17:38 #29
Цитата Сообщение от Penelent Посмотреть сообщение
разве туда не рандомно подавать можно?
А разве можно подавать рандомно? Метод Якоби годится не для всех данных, есть критерии сходимости (как и для любого итерационного алгоритма). Изучайте, проверяйте.

Добавлено через 2 часа 25 минут
Вызывает удивление 2 факта:
1. Как ТС исхитрился так подобрать исходные данные, что метод Якоби стал архинеустойчивым (даже если начальные значения Х отличаются от точных на 0.01, алгоритм идет вразнос).
2. Почему для такой маленькой матрицы не использовал метод Гауccа (он менее критичен к исходным данным)?
0
Penelent
Заблокирован
18.01.2016, 18:10  [ТС] #30
Цитата Сообщение от zer0mail Посмотреть сообщение
Как ТС исхитрился так подобрать исходные данные, что метод Якоби стал архинеустойчивым (даже если начальные значения Х отличаются от точных на 0.01, алгоритм идет вразнос).
что? о_О
Цитата Сообщение от zer0mail Посмотреть сообщение
Почему для такой маленькой матрицы не использовал метод Гауccа (он менее критичен к исходным данным)?
алгоритм нужен для диплома, там смысл не в алгоритме, а в распараллеливании, Якоби удобнее распараллеливать, а Гаусса, кажется нельзя вообще
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2016, 18:10
Привет! Вот еще темы с ответами:

Нарушение прав доступа при чтении по адресу - C++
#include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;cstring&gt; #include &lt;cmath&gt; using namespace std; class String { ...

Нарушение прав доступа при чтении по адресу - C++
Доброго времени суток! Пишу некую прогу. Так вот у меня выпадает ошибка, на скринах показана. загрузка с серверов майкрософт стоит. если...

Нарушение прав доступа при чтении по адресу - C++
Доброго времени суток. Делал задание из Лафоре, и заметил, что при попытке прочитать данные из файла выдаёт ошибку (скрин). Мои действия с...

Нарушение прав доступа при чтении по адресу - C++
Здравствуйте, форумчане. Дабы не писать долго я описал свою проблему в видео https://youtu.be/oufPPGrGiek


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.01.2016, 18:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru