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

Ошибка на стадии выполнения ptr = ptr; - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как поменять значение регистра? http://www.cyberforum.ru/cpp-beginners/thread928659.html
У меня есть регистр, который определяет место, в котором программа останавливается перед заходом в функцию. Мне нужно шагнуть на следующее место, где эта функция вычисляется. ADDRINT InstPtr = (ADDRINT)PIN_GetContextReg( ctxt, REG_INST_PTR ); ADDRINT NewInstPtr = InstPtr + 1; Вторая строчка написана не правильно, но как шагнуть на это значение регистра, я не знаю.
C++ W8054 Style of function definition is now obsolete При выполнении кода возникает предупреждение, о том, что я использую старый стиль объявления функций. Раньше таких предупреждений не получал. Здесь точно в стиле проблема? Предупреждение: W8054 Style of function definition is now obsolete //--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #pragma hdrstop ... http://www.cyberforum.ru/cpp-beginners/thread928629.html
Что принимает какие значения? C++
pNew->pPrev=pLast pNew->pNext=NULL pFirst=pFirst->pNext помогите разобратся пожайлуста, что принимает какие значения, а то я что-то не совсем понял с этими стрелочками когда их надо ставить, к примеру первая строчка, это New записываем в Prev и делаем его Last или как? или третья строка тоже несовсем понятна, подскажите пожайлуста или вот pNew->val=val что куда переходить или как тут вопще?
C++ Вычислить сумму ряда
По заданным числам n и a вычислить значение суммы: \sum_{i=1}^{n}i*a^i #include <iostream> #include <cmath> #define ll long long inline ll binpow(ll x, ll n) { ll res = 1; while (n) {
C++ Возведение в степень, отрицательные числа http://www.cyberforum.ru/cpp-beginners/thread928607.html
В библиотеке <cmath> есть такая функция pow(A,B) - получаешь результат возведения A в степень B Решил написать свой pow с положительными числами работает, а вот с отрицательными я не могу понять как правильно, 1. -2 в 2 степени, на яндексе показывает что должно быть -4, обычный калькулятор показывает -4, pow(A,B) из <cmath> показывает 4, мой pow тоже показывает 4 2. -2 в 3 степени, везде...
C++ вывод генерированных чисел помогите с программой. Суть в том что нужно посчитать числа по формулам и получить примерно такой результат.. подробнее

Показать сообщение отдельно
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
25.07.2013, 17:45  [ТС]     Ошибка на стадии выполнения ptr = ptr;
Цитата Сообщение от alsav22 Посмотреть сообщение
Тут и ищите ошибку. Ясновидящих нет.
Но если я через F10 и F11 (передвигаюсь по коду visual studio) просматриваю выполнение, программа вылетает именно в месте где указатель получает указатель на объект. В методах ничего особого не происходит...
Парсер:
Кликните здесь для просмотра всего текста
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
100
101
102
#include "Parser.h"
void CParser::LoadFromEcad(CObject * object, const std::wstring & path )
{
    if (IsFileExist(path))
    {
        object_ = object;
        std::ifstream file_stream( path.c_str() );
        std::string tmp;
        file_stream >> tmp;
        if ( tmp == "START" )
            while (tmp != "END")
            {
                file_stream >> tmp;
                VertexParse(file_stream,tmp);
                IndexParse(file_stream,tmp);
                DiffuseParse(file_stream,tmp);
                AmbientParse(file_stream,tmp);
            }
        file_stream.close();
        /*
        inputFile.close();
        object.CalculateNormalVector();
        //device->SetMaterial( &object.material);
        object.RotationAXis(object.pitch,object.yaw,object.roll);
        */
    }
    else
    {
        // InitEmptyObject();
    }
}
 
inline bool CParser::IsFileExist(const std::wstring & file_path)
{
    return PathFileExistsW( file_path.c_str() ) == TRUE;
}
 
void CParser::VertexParse( std::ifstream & file_stream, std::string & tmp )
{
    if (tmp == "<vertex>")
        file_stream >> tmp;
        while(tmp != "</vertex>")
        {
            float x,y,z;
            x = to_float(tmp);
            file_stream >> tmp;
            y = to_float(tmp);
            file_stream >> tmp;
            z = to_float(tmp);
            object_->vertex_database.push_back(CUSTOMVERTEX(x,y,z));
            file_stream >> tmp;
        }
        file_stream >> tmp;
}
 
void CParser::IndexParse( std::ifstream & file_stream, std::string & tmp )
{
    if (tmp == "<index>")
        file_stream >> tmp;
        while(tmp != "</index>")
        {
            object_->index_database.push_back(to_int(tmp));
            file_stream >> tmp;
        }
        file_stream >> tmp;
}
 
void CParser::DiffuseParse( std::ifstream & file_stream, std::string & tmp )
{
    if (tmp == "<diffuse_rgba>")
        file_stream >> tmp;
        while(tmp != "</diffuse_rgba>")
        {   
            object_->material.Diffuse.r = to_float(tmp);
            file_stream >> tmp;
            object_->material.Diffuse.g = to_float(tmp);
            file_stream >> tmp;
            object_->material.Diffuse.b = to_float(tmp);
            file_stream >> tmp;
            object_->material.Diffuse.a = to_float(tmp);
            file_stream >> tmp;
        }
        file_stream >> tmp;
}
 
void CParser::AmbientParse( std::ifstream & file_stream, std::string & tmp )
{
    if (tmp == "<diffuse_rgba>")
        file_stream >> tmp;
        while(tmp != "</diffuse_rgba>")
        {   
            object_->material.Diffuse.r = to_float(tmp);
            file_stream >> tmp;
            object_->material.Diffuse.g = to_float(tmp);
            file_stream >> tmp;
            object_->material.Diffuse.b = to_float(tmp);
            file_stream >> tmp;
            object_->material.Diffuse.a = to_float(tmp);
            file_stream >> tmp;
    }
    file_stream >> tmp;
}

Объект:
Кликните здесь для просмотра всего текста
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
#include "Object.h"
CObject::CObject()
{
    D3DXMatrixIdentity(&matrix_transform);
    CalculateNormalVector();
    ZeroMemory( &material, sizeof(material) );
    material.Ambient.a = material.Ambient.b = material.Ambient.g = material.Ambient.r = 1;
    material.Diffuse.a = material.Diffuse.b = material.Diffuse.g = material.Diffuse.r = 1;
    text.Initialize();
    pitch = yaw = roll = 1.f;
    b_picked = false;
}
 
void CObject::TurnOnOffText()
{
    text.TurnOnOff();
}
 
void CObject::CopyToBuffer()
{
    bool bError = false;
    if( FAILED( device->CreateVertexBuffer( vertex_database.size()*sizeof(CUSTOMVERTEX),    0 , D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &vertex_buffer, NULL ) ) ) bError = true;
    if( FAILED( device->CreateIndexBuffer(30*sizeof(index_database),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&index_buffer,NULL ) ) ) bError = true;
    VOID* pVertices;
    VOID* pIndex;
    if( FAILED( vertex_buffer->Lock( 0, vertex_database.size()*sizeof(CUSTOMVERTEX), (void**)&pVertices, 0 ) ) ) bError = true;
    if( FAILED( index_buffer-> Lock(0, vertex_database.size()*sizeof(USHORT),   (void**) &pIndex,0) ) ) bError = true;
    if (bError)
    {
        MessageBoxW(NULL,L"Ошибка в программе",L"Сообщение об ошибке",NULL);
        PostQuitMessage(0);
    }
    
    memcpy( pVertices, &vertex_database[0], vertex_database.size()*sizeof(CUSTOMVERTEX));
    memcpy( pIndex, &index_database[0], index_database.size()*sizeof(USHORT));
    vertex_buffer->Unlock();
    index_buffer->Unlock();
}
void CObject::Update()
{
    GetObjectCenter();
    TextDraw();
}
void CObject::Draw()
{   
    device->SetStreamSource( 0, vertex_buffer, 0, sizeof(CUSTOMVERTEX) );
    device->SetFVF(D3DFVF_CUSTOMVERTEX);
    device->SetIndices(index_buffer);
    device->SetTransform(D3DTS_WORLD,&matrix_transform);
    device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,vertex_database.size(),0,index_database.size()/3);
    text.Write();
}
 
void CObject::CalculateNormalVector()
{
    D3DXVECTOR3 u,v,n;
    D3DXVECTOR3 poli[3];
    for (unsigned int i = 0; i < index_database.size(); i+=3)
    {
        for (unsigned int j = 0;j<3;j++)
        {
            poli[j]=vertex_database.at(index_database.at(i+j)).ToVector();
        }
        u = poli[1]-poli[0];
        v = poli[2]-poli[0];
        D3DXVec3Cross(&n,&v,&u); // v * u, именно в таком порядке !
        D3DXVec3Normalize(&n,&n);
        for (unsigned int j = 0;j<3;j++)
        {
            vertex_database.at(index_database.at(i+j)).SetNormalVector(n);
        }
    }
}
 
 
void CObject::GetObjectCenter() 
{
    D3DXVECTOR3 sum(0,0,0);
    for (unsigned int i = 0; i < index_database.size(); i++)
    {
        unsigned int j = index_database.at(i);
        sum+= D3DXVECTOR3(vertex_database.at(j).x,vertex_database.at(j).y,vertex_database.at(j).z);
    }
    center = D3DXVECTOR3(sum.x/vertex_database.size(),sum.y/vertex_database.size(),sum.y/vertex_database.size());
}
 
 
 
void CObject::TextDraw() // организовать подачу через камеру
{
    GetObjectCenter();
    LONG top,bottom,right,left;
    D3DXVECTOR3 screenspace = camera->WorldToScreen(D3DXVECTOR3(center.x,center.y,0.f),&matrix_transform);
    D3DXVECTOR3 worldspace = camera->ScreenToWorld(D3DXVECTOR3(center.x,center.y,0.f),&matrix_transform);
    int coor = 140;
    top    = (LONG) screenspace.y-coor;
    bottom = (LONG) screenspace.y+coor;
    right  = (LONG) screenspace.x+coor;
    left   = (LONG) screenspace.x-coor;
    text.SetRect(top,bottom,right,left);
    text = L"rect(" + to_wstr((int)screenspace.x) + L";" + to_wstr((int)screenspace.y) + L")";
    text = L"center(" + to_cut_wstr(worldspace.x) + L";" + to_cut_wstr(worldspace.y) + L";" + to_cut_wstr(worldspace.z) + L")";
    text = L"vertices:" + to_wstr(vertex_database.size()) + L"  indexes:" + to_wstr(index_database.size());
    text = L"Pitch:" + to_cut_wstr(pitch);
    text = L"Yaw:" + to_cut_wstr(yaw);
    text = L"Roll:" + to_cut_wstr(roll);
    text = L"Picked:" + to_wstr(b_picked);
}
 
void CObject::RotationAXis(float & _x,float & _y,float _z = 0.f)
{
    const float strenght = 0.005f;
 
    yaw += _x * strenght;
    pitch += _y * strenght;
    roll += _z  * strenght;
    D3DXMatrixRotationYawPitchRoll(&matrix_transform,pitch,yaw,roll);
    b_changed = true;
}
 
void CObject::RotationAxis(D3DXVECTOR3& Axis,float angle)
{
    D3DXMatrixRotationAxis(&matrix_transform,&Axis,D3DXToRadian(angle));
    b_changed = true;
}
 
void CObject::MoveOnX(float value)
{
    D3DXMatrixTranslation(&matrix_transform,value,0.f,0.f);
    b_changed = true;
}
void CObject::MoveOnY(float value)
{
    D3DXMatrixTranslation(&matrix_transform,0.f,value,0.f);
    b_changed = true;
}
 
void CObject::MoveOnZ(float value)
{
    D3DXMatrixTranslation(&matrix_transform,0.f,0.f,value);
    b_changed = true;
}
 
void CObject::MoveOnVector(D3DXVECTOR3 &vec)
{
    D3DXMatrixTranslation(&matrix_transform,vec.x,vec.y,vec.z);
    b_changed = true;
}
 
void CObject::LoadObjectFromECAD(const std::string & szFileName)
{
    std::ifstream inputFile( szFileName.c_str() ); // Передаем имя файла из которого нужно читать
    std::string tmp;
    inputFile >> tmp;
    if (tmp == "vertex:")
    {
        inputFile >> tmp;
        while (tmp != "index:")
        {
            float x,y,z;
            x = to_float(tmp);
            inputFile >> tmp;
            y = to_float(tmp);
            inputFile >> tmp;
            z = to_float(tmp);
            vertex_database.push_back(CUSTOMVERTEX(x,y,z));
            inputFile >> tmp;
        }
    }
    if (tmp == "index:")
    {
        inputFile >> tmp;
        while (tmp != "END.")
        {
            index_database.push_back(to_int(tmp));
            inputFile >> tmp;
        }
    }
    inputFile.close();
    CalculateNormalVector();
    device->SetMaterial( &material);
    RotationAXis(pitch,yaw,roll);
};
 
void CObject::LoadMaterial(const std::string & szFileName)
{
    std::ifstream inputFile( szFileName.c_str() ); // Передаем имя файла из которого нужно читать
    std::string tmp;
    inputFile >> tmp;
    if (tmp == "DiffuseRGBA:")
    {
        inputFile >> tmp;
        material.Diffuse.r = to_float(tmp);
        inputFile >> tmp;
        material.Diffuse.g = to_float(tmp);
        inputFile >> tmp;
        material.Diffuse.b = to_float(tmp);
        inputFile >> tmp;
        material.Diffuse.a = to_float(tmp);
        inputFile >> tmp;
    }
    if (tmp == "AmbientRGBA:")
    {
        inputFile >> tmp;
        material.Ambient.r = to_float(tmp);
        inputFile >> tmp;
        material.Ambient.g = to_float(tmp);
        inputFile >> tmp;
        material.Ambient.b = to_float(tmp);
        inputFile >> tmp;
        material.Ambient.a = to_float(tmp);
        inputFile >> tmp;
    }
    inputFile.close();
}
 
void CObject::CheakHit(const POINT2D & ptMouseHit)
{
    D3DXVECTOR3 vecCamPos; // Первая точка в векторе это позиция камеры
    D3DXVECTOR3 vecRayEnd; // Эта точка куда стреляет камера, условно она находися в 0 позиции по оси Z, т.к. объекты с нее не уедут
    D3DXVECTOR3 vecLineDirection; // я очень надеюсь что это будет луч стреляющий в объект
    D3DXVECTOR3 vecNormal; // Нормаль для плоскости (читай полигона)
    D3DXVECTOR3 vecFromCamPosToPoly = vecCamPos; // Вектор до плоскости
    float fDistanceToPlane; // Расстояние до плоскости
 
    vecCamPos = camera->GetCameraPosition();
    vecRayEnd = camera->ScreenToWorld(D3DXVECTOR3(ptMouseHit.x,ptMouseHit.y,0.f),&matrix_transform);
    vecLineDirection = vecRayEnd - vecCamPos; // Получаем лучь стреляющий из позиции камеры в сторону которую счелкает мышь
 
    // Тут находятся нормали для каждого полигона
    for (unsigned int i = 0; i < index_database.size(); i+=3)
    {
        D3DXVECTOR3 point3dOnPoly = vertex_database.at(index_database.at(i)).ToVector();
        vecNormal = vertex_database.at(index_database.at(i)).GetNormalVector();
        vecFromCamPosToPoly = point3dOnPoly - vecCamPos;
        
                
        // for (unsigned int j = 0;j<3;j++){} //vecNormal = vertex.at(index.at(i+j)).GetNormalVector();
        
 
 
    }
    
 
}

Но их код не нужен.
1.Ошибок доступа нет, т.к. программа линкуется
2.Вызова не инициализированных значений нет, т.к. до этих полей не доходит выполнение
Ложиться все на
C++
1
 object_ = object;
 
Текущее время: 04:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru