Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1
#1

Необработанное исключение по адресу - C++

02.11.2013, 12:57. Просмотров 1326. Ответов 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
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <conio.h>
#include <math.h>
#include <clocale>
using namespace std;
                                                                         //помилка в визначенні відрізка ізоляції (ЕОМ вибирає [1;2]) 
float func(float);//основна функція
float der1(float);//похідна 1-го порядку
float der2(float);//похідна 2-го порядку
float f3(float,float);//третя формула
float f7(float,float);//сьома формула
 
 
void main()
{
    setlocale (LC_ALL,"Russian");
    int id;//id-номер x[nt](наближений корінь р-ня)
    float x[255],n,t,a,b,c,e,i[2],j[2];
    bool vi,fl;
    /* x*x+4sin(x)=0
    x є (-в€ћ;+в€ћ)
    F'(x)=2x+4cos(x)
    2x+4cos(x)=0
    2(x+2cosx)=0
    cos(x)=-x/2 */
    
    cout<<"Минченко Антон    П-11\n Oтделить корни уравнения x^2+4sinx=0 и уточнить один из них c точностью\n Е = 0.001.\n";
 
    n=func(0);
    t=func(1);
    if((n*t)<0) {a=0;b=1;}//знаходження відрізка ізоляції
    else
    {i[1]=0;
    i[0]=-1;
    j[0]=1;
    j[1]=2;
   
    vi=0;
    while(vi==0)
    if((func(i[1])*func(i[0]))<0) {a=i[0];b=i[1];vi=1;}        //знаходження відрізка ізоляції
    else if((func(j[0])*func(j[1]))<0) {a=j[0];b=j[1];vi=1;}
    else 
    {i[1]--;//декрементація
    i[0]--;
    j[0]++;//інкрементація   
    j[1]++;}
    }
 
    cout<<"["<<a<<";"<<b<<"]\n";
 
    if(der2(a)*func(a)>0) {c=a;e=b;}//якщо добуток похідної другого порядку та функції >0 ,то а-нерухомий кінець відрізка
    else {c=b;e=a;}//інакше b-нерухомий кінець відрізка
 
    cout<<c<<"-неподвижный конец отрезка\n";
 
    id=0;
    x[0]=c;
 
 
fl=0;
     if(der1(c)*der2(c)>0)//якщо добуток похідної першого порядку та похідної другого порядку більший нуля,то
            fl=1;
 
    vi=0;
    while(vi==0)
    {id++;
    if(fl==1) x[id]=f3(x[id-1],e);
    else x[id]=f7(x[id-1],e);
    if(abs(x[id]-x[id-1])<=0.001) vi=1;
    }
 
    cout<<x[id];
    getch();
    }
 
float func(float d)
{
    return d*d+4*sin(d);
}
 
float der1(float d)
{
    return 2*d+4*cos(d);
}
 
float der2(float d)
{
    return 2-4*sin(d);
}
 
float f3(float d, float e)
{
    return d-(func(d)*(e-d))/(func(e)-func(d)); 
}
 
float f7(float d, float e)
{
    return d-(func(d)*(e-d))/(func(d)-func(e));
}

http://www.cyberforum.ru/cpp-beginners/thread1390635.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 12:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Необработанное исключение по адресу (C++):

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

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

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

Что я сделал не так?Возникло необработанное исключение по адресу 0x7434A9F2 : исключение Microsoft C++: std
//Калькулятор Intrigger #include&lt;iostream&gt; #include&lt;conio.h&gt; ...

Необработанное исключение по адресу
Доброго времени суток! Долгое время учился кодить на Паскале, в данный момент...

16
Max Dark
шКодер самоучка
1890 / 1690 / 834
Регистрация: 09.10.2013
Сообщений: 3,746
Записей в блоге: 6
Завершенные тесты: 2
02.11.2013, 13:01 #2
строки 39 - 47 неизменяется vi, происходит обращение по адресу не принадлежащему массиву.
это раз
в функциях нет проверки деления на 0
это два

Не по теме:

форматирование кода -- тихий ужасЪ
- три

0
triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1
02.11.2013, 13:09  [ТС] #3
Цитата Сообщение от Cra3y Посмотреть сообщение
строки 39 - 47 неизменяется vi, происходит обращение по адресу не принадлежащему массиву.
Программа правильно вычесляет и выводит отрезок изоляции,значит в 39-47 всё правильно.
Цитата Сообщение от Cra3y Посмотреть сообщение
в функциях нет проверки деления на 0
Я решал это уравнение вручную (на листке),то там никак не может быть деление на 0 (только если программа неправильно работает).
0
Max Dark
шКодер самоучка
1890 / 1690 / 834
Регистрация: 09.10.2013
Сообщений: 3,746
Записей в блоге: 6
Завершенные тесты: 2
02.11.2013, 13:13 #4
Значит смотрите строки 65-74
У Вас полюбому переполнение индекса массива
И я не вижу инициализации переменной id
0
triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1
02.11.2013, 13:14  [ТС] #5
Цитата Сообщение от Cra3y Посмотреть сообщение
Значит смотрите строки 65-74
У Вас полюбому переполнение индекса массива
И я не вижу инициализации переменной id
ВС выделяет мне массив иксов красным:
+ x 0x001ff654 {-2.00000000, -2.13296127, -2.50680089, -3.44574976, -5.51666355, -9.73294258, -18.2557201, ...} float[255]

Значит здесь ошибка:
C++
1
2
3
4
5
6
7
 vi=0;
    while(vi==0)
    {id++;
    if(fl==1) x[id]=f3(x[id-1],e);
    else x[id]=f7(x[id-1],e);
    if(abs(x[id]-x[id-1])<=0.001) vi=1;
    }
id-56 строка.
Разница в между иксами в массиве постоянно увиличивается,а должно быть наоборот.Видимо программа использует не ту формулу.Походу ошибка в алгоритме.
А ошибку выбивает наверно через то,что я дал 255 элементов,а их не хватает и программа заходит за 255...
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 13:18 #6
Цитата Сообщение от Cra3y Посмотреть сообщение
строки 39 - 47 неизменяется vi
Изменяется в концах 40-й и 41-й строк.
0
Max Dark
шКодер самоучка
1890 / 1690 / 834
Регистрация: 09.10.2013
Сообщений: 3,746
Записей в блоге: 6
Завершенные тесты: 2
02.11.2013, 13:19 #7
посмотрите содержимое id после исключения в отладчике
0
triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1
02.11.2013, 13:21  [ТС] #8
Цитата Сообщение от Cra3y Посмотреть сообщение
посмотрите содержимое id после исключения в отладчике
C++
1
2
3
4
5
fl=0;
     if(der1(c)*der2(c)>0)//якщо добуток похідної першого порядку та похідної другого порядку більший нуля,то
            fl=1;
 
     cout<<fl;
Мне почему-то выводит ,что fl="0-2".
Вот ,походу, здесь и ошибка.
0
Max Dark
02.11.2013, 13:22
  #9

Не по теме:

"Милорд, не хватает пробелов и отступов" )

0
triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1
02.11.2013, 13:24  [ТС] #10
Цитата Сообщение от Cra3y Посмотреть сообщение
посмотрите содержимое id после исключения в отладчике
А как делать отладку в VS 2010(ато я всегда работал ток в 2005,а здесь рус.язык и другой интерфейс).
0
Tulosba
02.11.2013, 13:26
  #11

Не по теме:

Цитата Сообщение от triadec_96 Посмотреть сообщение
а здесь рус.язык и другой интерфейс
кто ж Вас тянул русский-то ставить.

0
Max Dark
шКодер самоучка
1890 / 1690 / 834
Регистрация: 09.10.2013
Сообщений: 3,746
Записей в блоге: 6
Завершенные тесты: 2
02.11.2013, 13:28 #12
Я давно VS не пользовался, но помоему клавиши не изменились F5 -запуск под отладчиком F6 - пошагово, с пропуском заходов в функции
По меню посмотрите, там клавиши должны быть указаны
0
triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1
02.11.2013, 13:28  [ТС] #13
Цитата Сообщение от Tulosba Посмотреть сообщение

Не по теме:


кто ж Вас тянул русский-то ставить.

да не знал какую версию устанавливал.
0
triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1
02.11.2013, 13:32  [ТС] #14
Цитата Сообщение от Cra3y Посмотреть сообщение
посмотрите содержимое id после исключения в отладчике
-4194304

ooo...fl уже 0.
прогерс!
0
Max Dark
шКодер самоучка
1890 / 1690 / 834
Регистрация: 09.10.2013
Сообщений: 3,746
Записей в блоге: 6
Завершенные тесты: 2
02.11.2013, 13:41 #15
вставьте в цикл проверку на id>=размера массива
если привысит выводите что решение не найдено)после выход из проги
и ковыряйте дальше логику программы(Извиняюсь, я сейчас на веселе %))

и добавте в цикл вывод переменных в консоль, в частности того же индекса иногда помогает
1
triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1
02.11.2013, 14:07  [ТС] #16
Цитата Сообщение от Cra3y Посмотреть сообщение
вставьте в цикл проверку на id>=размера массива
если привысит выводите что решение не найдено)после выход из проги
и ковыряйте дальше логику программы(Извиняюсь, я сейчас на веселе %))

и добавте в цикл вывод переменных в консоль, в частности того же индекса иногда помогает
я так и сделал.
нашёл одну ошибку в функции f7.
Ищу ещё ошибки в алгоритме.

Добавлено через 8 минут
Цитата Сообщение от Cra3y Посмотреть сообщение
вставьте в цикл проверку на id>=размера массива
если привысит выводите что решение не найдено)после выход из проги
и ковыряйте дальше логику программы(Извиняюсь, я сейчас на веселе %))
и добавте в цикл вывод переменных в консоль, в частности того же индекса иногда помогает
всё.Нашёл ошибки,исправил их.Программа работает правильно.
Спасибо огромное)
0
Max Dark
шКодер самоучка
1890 / 1690 / 834
Регистрация: 09.10.2013
Сообщений: 3,746
Записей в блоге: 6
Завершенные тесты: 2
02.11.2013, 14:14 #17
И да, единственное решение уравнения находится на отрезке -2*pi/3 ... -pi/4
ибо
cos(0) = 1, -(0)/2 = 0
cos(1) = 0, -(1)/2 = -0.5
cos(-1) = 0, -(-1)/2 = 0.5

Добавлено через 3 минуты
Немного не те константы вместо 1 надо pi
Но смысл я думаю понятен
0
02.11.2013, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 14:14
Привет! Вот еще темы с решениями:

Необработанное исключение по адресу
Здравствуйте, объясните пожалуйста от чего такое может быть Судя по...

Необработанное исключение по адресу
Описать процедуру SortInc(A,N), выполняющую сортировку по возрастанию массива А...

Необработанное исключение по адресу
Доброго времени суток!!!!:) ест программа в ней переменная которой ...

Необработанное исключение по адресу 0x002F1637
Доброго времени суток. В процессе написания программы для лабораторной работы...


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

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

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