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

Ошибка при заполнении матрицы - C++

Восстановить пароль Регистрация
 
iVeage
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 9
27.05.2012, 21:06     Ошибка при заполнении матрицы #1
доброго времени суток!

Будьте добры помогите!
Вот код:
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
T_complex** calc_Fullfield(T_complex *fr, double fr_begin, double fr_end, double fr_step,
                     double begin, double end, double step)
{
    double m_omega, z, b_omega, t;
    T_complex ampl1, ampl2, Eomeg, e_minus_ipx, e_minus_iomegax, Eomega2, e_ipx;
    int N, M, NNN_fr, V;
    M=(int)floor((end-begin)/step)+2;
    N=(int)floor((end-begin)/step)+2;
    V=(int)floor((2*end-begin)/step)+2;
    T_complex ** Efull_t;
    Efull_t = (T_complex**)malloc(V*sizeof(T_complex*));
    double ndeltatetta, nq;
    M = 0;
    N = 0;
    for ( z = begin; z < end; z = z + step ) //заполняем массив шагом по p: step 
    {
        for (t = begin; t < end; t = t + step)//заполняем массив  с шагом по t: step 
        {
            NNN_fr = 0;
            Efull_t[N][M].re=0.0;
            Efull_t[N][M].im=0.0;
            for ( m_omega =  -infinity; m_omega < infinity; m_omega = m_omega + intstep) //для данного p интегрируем по x с шагом intstep
                    {
                    ndeltatetta = m_omega-1;    
                    if ( ( ndeltatetta * ndeltatetta ) < ( nkappa * nkappa ) )
                        {
                        nq = sqrt( nkappa * nkappa - ndeltatetta * ndeltatetta );
 
                                ampl1.re = fr[NNN_fr].re*(nq*nq*cosh(nq*l)*cosh(nq*l)*cosh(nq*(z-l)))/(nq*nq*cosh(nq*l)*cosh(nq*l)+ndeltatetta*ndeltatetta*sinh(nq*l)*sinh(nq*l));
                                ampl1.im = fr[NNN_fr].im*(ndeltatetta*sinh(nq*(z-l)*nq*cosh(nq*l)))/(nq*nq*cosh(nq*l)*cosh(nq*l)+ndeltatetta*ndeltatetta*sinh(nq*l)*sinh(nq*l));
                                ampl2.re = fr[NNN_fr].re*(ndeltatetta*sinh(nq*l)*sinh(nq*(z-l)))/(nq*nq*cosh(nq*l)*cosh(nq*l)+ndeltatetta*ndeltatetta*sinh(nq*l)*sinh(nq*l));
                                ampl2.im = fr[NNN_fr].im*(nkappa*nq*sinh(nq*(z-l))*sinh(nq*l))/(nq*nq*cosh(nq*l)*cosh(nq*l)+ndeltatetta*ndeltatetta*sinh(nq*l)*sinh(nq*l));     
                                }
                            if ( ( ndeltatetta * ndeltatetta ) > ( nkappa * nkappa ) )
                                {
                                nq = sqrt( ndeltatetta * ndeltatetta - nkappa * nkappa );
            
                                    ampl1.re = (fr[NNN_fr].re*nq*nq*cos(nq*l)*cosh(nq*l)*cos(nq*(z-l)))/(nq*nq*cos(nq*l)*cos(nq*l)+ndeltatetta*ndeltatetta*sin(nq*l)*sin(nq*l));
                                    ampl1.im = (fr[NNN_fr].im*ndeltatetta*sin(nq*(z-l)*nq*cos(nq*l)))/(nq*nq*cos(nq*l)*cos(nq*l)+ndeltatetta*ndeltatetta*sin(nq*l)*sin(nq*l));
                                    ampl2.re = (fr[NNN_fr].re*ndeltatetta*sin(nq*l)*sin(nq*(z-l)))/(nq*nq*cos(nq*l)*cos(nq*l)+ndeltatetta*ndeltatetta*sin(nq*l)*sin(nq*l));
                                    ampl2.im = (fr[NNN_fr].im*nkappa*nq*sin(nq*(z-l))*sin(nq*l))/(nq*nq*cos(nq*l)*cos(nq*l)+ndeltatetta*ndeltatetta*sin(nq*l)*sin(nq*l));               
                                }
 
                    NNN_fr = NNN_fr + 1;
 
                    e_minus_ipx.re = cos(0.7*z+t);
                    e_minus_ipx.im = sin(0.7*z+t);
 
                    e_ipx.re = cos(0.7*z-t);
                    e_ipx.im = sin(0.7*z-t);
 
                    Eomeg.re = ampl1.re*e_minus_ipx.re - ampl1.im*e_minus_ipx.im + ampl2.re*e_ipx.re + ampl2.im*e_ipx.im;
                    Eomeg.im = ampl1.re*e_minus_ipx.im + ampl1.im*e_minus_ipx.re + ampl2.im*e_ipx.re - ampl2.re*e_ipx.im;
                    
                    e_minus_iomegax.re = cos((m_omega-1)*t);
                    e_minus_iomegax.im = sin((m_omega-1)*t);
                    
                    Eomega2.re = Eomeg.re*e_minus_iomegax.re - Eomeg.im*e_minus_iomegax.im;
                    Eomega2.im = Eomeg.re*e_minus_iomegax.im + e_minus_iomegax.re*Eomeg.im;
            
                    Efull_t[N][M].re=Efull_t[N][M].re+Eomega2.re;
                    Efull_t[N][M].im=Efull_t[N][M].im+Eomega2.re;
                    N=N+1;
                    M=M+1;  
                    }
                    
                }
        }
    return( Efull_t );
}
Ругается так: First-chance exception at 0x00a73f27 in FullField.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.
Unhandled exception at 0x00a73f27 in FullField.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.

на данном моменте:
C++
1
2
3
4
5
 for (t = begin; t < end; t = t + step)//заполняем массив  с шагом по t: step 
        {
            NNN_fr = 0;
            Efull_t[N][M].re=0.0;
            Efull_t[N][M].im=0.0;
Уже не могу понять в чем дело. С двумерными массивами работаю первый раз. Делал все по интуиции. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2012, 21:06     Ошибка при заполнении матрицы
Посмотрите здесь:

C++ Ошибка при заполнении массива малыми числами
C++ Где кроется ошибка при заполнении массива структур?
Ошибка при заполнении C++
Ошибка при заполнении двусвязного списка C++
C++ ошибка при заполнении массива
Ошибка при заполнении массива C++
При заполнении матрицы _ и * появляются странные символы C++
Ошибка при заполнении динамического массива C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
27.05.2012, 21:23     Ошибка при заполнении матрицы #2
C++
1
 Efull_t = (T_complex**)malloc(V*sizeof(T_complex*));
Выделяется память только под адреса строк массива.
Теперь по каждому адресу надо выделить память для самих строк
C++
1
2
for(int i=0;i<V;i++)
    Efull_t[i] = (T_complex*)malloc(N*sizeof(T_complex));
Yandex
Объявления
27.05.2012, 21:23     Ошибка при заполнении матрицы
Ответ Создать тему
Опции темы

Текущее время: 12:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru