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

не пойму из-за чего Access violation - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Формулы http://www.cyberforum.ru/cpp-beginners/thread910485.html
2x/корень(1-x^4) 2*(x^4+1)/(1*x^4)^3/2 как записать их в с++ ?
C++ Нужно подправить рекурсивную функцию Всем доброго времени суток! Сама задача звучит так: Разработать рекурсивную функцию возвращающую значение, для вычисления максимального значения в одномерном массиве. Вот мой код. Помогите плз подправить функцию Max. Я никак сам не додумаюсь как тут и что сделать чтобы рекурсия явилась :) Только если можно, попроще, я в ВУЗе только начал рекурсию проходить...1 курс...будь он не ладен((( ... http://www.cyberforum.ru/cpp-beginners/thread910482.html
Создать файл с именем указанным пользователем и записать в него его же имя C++
Необходимо создать файл с именем указанным пользователем и записать в него его же имя string name; cout<<"Введите имя: "; cin.sync(); getline(cin,name); ofstream file(name); file.open(name); file << name; file.close();
Совет C++
Я понимаю что раздел не тот но дайте ответ на вопрос:что сначала учить Delphi или С++ (ООП) Я знаю Pascal,C++ (1 курс - finish)
C++ перевести на язык С++ с Паскаля http://www.cyberforum.ru/cpp-beginners/thread910474.html
переведите пожалуйста сумму бесконечного ряда uses crt; var a,s,x:real; i:integer; eps:real; function fct(n:integer): real; var f: real; i: integer; begin f:=1;
C++ Строки (ввести строку разделенную пробелами, и в словах которые оканчиваются на АВС заменить СС) ввести строку разделенную пробелами, и в словах которые оканчиваются на АВС заменить СС... помогите просто определить 3 последнии буквы,и как менять их)) просто завтра экзамен) подробнее

Показать сообщение отдельно
dwa83
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 13
24.06.2013, 03:31     не пойму из-за чего Access violation
При запуске проги происходит Access violation. Причём ранее проект был написан в bcb6, затем ради эксперимента(и возможного переезда) перенесён в vc++ 6. И там, и здесь всё работало в норме. При переезде обратно на борланда опять же всё компилится, но происходит access violation при new. Понять не могу почему.

C++
1
2
3
4
5
6
7
// выделение памяти под полигоны
void Mesh::CreatePolygons(int count)
{
  this->p_count=count;
  this->DelPolygons();
  this->polygon= new Polygon3d[count];  // здесь происходит ошибка
}
до этого в основном модуле происходит объявление

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
StaticModel model;      // статичная модель
 
StaticModel представляет собой
struct StaticModel
{
  float rotx;
  float roty;
  float rotz;
 
  unsigned short m_count;       // количество сеток
  Mesh *mesh;                   // массив сеток
  TextureLibrary *texlib;       // указатель на библиотеку текстур
  Shader *shader;
  Vector3f work;
 
  void CreateMeshes(int count); // выделение памяти для отдельных сеток модели
  unsigned int FindChunk(ifstream& ifs, unsigned short id, bool isParent=true);
  bool Load3DS(char *p_filename);
  void Render();
};
CreatePolygons вызывается из

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
bool StaticModel::Load3DS(char *p_filename)
{
    int p;
 
    FILE *file = fopen(p_filename, "rb");         
    if (file==NULL) 
    {
      MsgLog(p_filename);   
      MsgLog("Файл модели не найден");
      return false; 
    }   
    
    unsigned short mcount;
 
    fread(&mcount,1,2,file);  // считали количество сеток
    CreateMeshes(mcount);       // создаём массив сеток
    for (int i=0; i<mcount; i++)
    {
      bool smooth;
      unsigned short vc,tc,pc;
 
      fread(&smooth,1,1,file);  // считаем сглаживание
      fread(&vc,1,2,file);  // считаем количество вершин
      mesh[i].CreateVertices(vc); // создаём массив вершин
      fread(&tc,1,2,file);  // считываем количество текстурных координат
      mesh[i].CreateTexcoords(tc);// создаём массив текстурных координат
      fread(&pc,1,2,file);  // считываем количество полигонов
      mesh[i].CreatePolygons(pc); // <- создаём массив полигонов ->> переходя отсюда и происходит ошибка
 
      // считываем все вершины
      for (int v=0; v<vc; v++)
      {
        fread(&mesh[i].vertex[v].x,1,4,file);
        fread(&mesh[i].vertex[v].z,1,4,file);
        fread(&mesh[i].vertex[v].y,1,4,file);
        mesh[i].vertex[v].z=-mesh[i].vertex[v].z;
      }
 
      // считываем все текстурные координаты
      for (int t=0; t<tc; t++)
      {
        fread(&mesh[i].texcoord[t].x,1,4,file);
        fread(&mesh[i].texcoord[t].y,1,4,file);
      }
 
      // считываем все номера вершин в полигонах
      for (p=0; p<pc; p++)
      {
        fread(&mesh[i].polygon[p].nom_vertex[0],1,2,file);
        fread(&mesh[i].polygon[p].nom_vertex[1],1,2,file);
        fread(&mesh[i].polygon[p].nom_vertex[2],1,2,file);
      }
 
      // считываем все номера текстурных координат для полигонов
      for (p=0; p<pc; p++)
      {
        fread(&mesh[i].polygon[p].nom_texcoord[0],1,2,file);
        fread(&mesh[i].polygon[p].nom_texcoord[1],1,2,file);
        fread(&mesh[i].polygon[p].nom_texcoord[2],1,2,file);
      }
 
      for (p=0; p<pc; p++)
      {
        // расчёт тангент-оси
        Vector3f p1 = mesh[i].vertex[mesh[i].polygon[p].nom_vertex[0]];
        Vector3f p2 = mesh[i].vertex[mesh[i].polygon[p].nom_vertex[1]];
        Vector3f p3 = mesh[i].vertex[mesh[i].polygon[p].nom_vertex[2]];
 
        Texcoord t1 = mesh[i].texcoord[mesh[i].polygon[p].nom_texcoord[0]];
        Texcoord t2 = mesh[i].texcoord[mesh[i].polygon[p].nom_texcoord[1]];
        Texcoord t3 = mesh[i].texcoord[mesh[i].polygon[p].nom_texcoord[2]];
 
        mesh[i].polygon[p].tangent=((t3.y-t1.y)*(p2-p1)-(t2.y-t1.y)*(p3-p1))/((t2.x-t1.x)*(t3.y-t1.y)-(t3.x-t1.x)*(t2.y-t1.y));
 
        mesh[i].polygon[p].tangent.normalise();
      }
 
      // имя файла текстуры
      char tname[255]={0};
      int cnt=0;
      do
      {
        fread(&tname[cnt],1,1,file);
        cnt++;
      }
      while (tname[cnt-1]!=0);
 
      // загрузка текстуры и карты нормалей
      mesh[i].texID=texlib->Load(tname);
      char nm_name[255] = {0};
      strcat(nm_name, "nm_");
      strcat(nm_name, tname);
      mesh[i].normmapID=texlib->Load(nm_name);
      
      // расчёт нормалей
      if (smooth)
      mesh[i].CalculateSmoothNormals();
      else
      mesh[i].CalculateNormals();
      
    }
 
    fclose(file);
    return true;
}
Не пойму что не так.. Если вручную count заменить на 1 или 20, то проходит нормально, но при следующем new в другой функции опять ошибка доступа..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru