Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Может ли std::vector быть членом класса? и как его инициализировать 
:(
    Опции темы
Чупакабро
Дата 27.9.2012, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.2.2007

Репутация: нет
Всего: 4



Внутри класса объявил вектор, а при попытке что-то сделать с этим вектором программа вылетает
--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue.
PM MAIL   Вверх
kosmonaFFFt
Дата 27.9.2012, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



А можно код хотя бы?


--------------------
user posted image
PM MAIL ICQ   Вверх
Чупакабро
Дата 27.9.2012, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.2.2007

Репутация: нет
Всего: 4



Вот:
Код

typedef std::vector<XMFLOAT33> VertexVector;
.......
struct Mesh
{
    int iStartIndex;
               ....
    VertexVector separatingAxis;
};
......
class PhNode
{
public:
    DWORD dwNodeNum;
.........
    Mesh* mesh;
.........
    void ComputeFacesAndLines();
    void ComputeNewVertices();
    void prepareSeparatingAxis();

};
.........
void PhNode::prepareSeparatingAxis() // поиск ребер для разделяющих осей
{
    mesh->separatingAxis.resize(1);
    for (int i = 0; i < mesh->dwFaceCount; ++i)  //перебор граней
    {
        for (int j = 0; j < mesh->faces[i].dwVertexCount; ++j) //перебор ребер грани
        {
            XMFLOAT33 p1 = mesh->faces[i].vertex[j];
            XMFLOAT33 p2 = mesh->faces[i].vertex[(j+1) % (mesh->faces[i].dwVertexCount -1)];
            XMFLOAT33 vec = Normalize33(p2 - p1);
            bool bFound=findSepAxe(vec); //проверка на наличие ребра в массиве
            bFound = bFound || findSepAxe(-vec);
            if (!bFound)
            {
                mesh->separatingAxis.push_back(vec);
            }
        }
    }
}

--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue.
PM MAIL   Вверх
mes
Дата 27.9.2012, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Чупакабро @  27.9.2012,  08:13 Найти цитируемый пост)
 Mesh* mesh;

где создание обьекта ?


--------------------
PM MAIL WWW   Вверх
rodnover
Дата 27.9.2012, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 2
Всего: 10



А где 
Код

Mesh* mesh;


создается?

Код

mesh = new Mesh();


PM MAIL   Вверх
Чупакабро
Дата 27.9.2012, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.2.2007

Репутация: нет
Всего: 4



Да создается все, чесслово:
Код

void LoadPhysObj(LPCWSTR filename, vertex** pvertices, DWORD** pindices) {
    HANDLE hFile;
............
    iPhMeshCount++;
    pPhMeshes=(Mesh**)realloc(pPhMeshes,iPhMeshCount*sizeof(Mesh*));
...................
    iNodeCount++;
    pNodes=(PhNode*)realloc(&pNodes[0],sizeof(PhNode)*iNodeCount);
    pNodes[iNodeCount-1]=PhNode::PhNode(iNodeCount-1);
    pNodes[iNodeCount-1].mesh=pPhMeshes[iPhMeshCount-1];
    
}


Это сообщение отредактировал(а) Чупакабро - 27.9.2012, 09:38
--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue.
PM MAIL   Вверх
feodorv
Дата 27.9.2012, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Чупакабро @  27.9.2012,  10:13 Найти цитируемый пост)
           XMFLOAT33 p2 = mesh->faces[i].vertex[(j+1) % (mesh->faces[i].dwVertexCount -1)];

Крайне сомнительная строчка. При dwVertexCount, равном 1, будет деление на ноль. 

Это сообщение отредактировал(а) feodorv - 27.9.2012, 09:39


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Dem_max
Дата 27.9.2012, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Скорее всего выход за границы массивов.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Чупакабро
Дата 27.9.2012, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.2.2007

Репутация: нет
Всего: 4



feodorv это оффтоп... там не может быть значение меньше 3. а по теме подсказать можете?
--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue.
PM MAIL   Вверх
mes
Дата 27.9.2012, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Чупакабро @  27.9.2012,  08:37 Найти цитируемый пост)
Да создается все, чесслово:


Цитата(Чупакабро @  27.9.2012,  08:37 Найти цитируемый пост)
    pPhMeshes=(Mesh**)realloc(pPhMeshes,iPhMeshCount*sizeof(Mesh*));

где создается ?! чесслово, я вижу только выделение памяти..  smile 


--------------------
PM MAIL WWW   Вверх
feodorv
Дата 27.9.2012, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Чупакабро @  27.9.2012,  10:41 Найти цитируемый пост)
eodorv это оффтоп...

Это юмор?
Цитата(Чупакабро @  27.9.2012,  10:41 Найти цитируемый пост)
там не может быть значение меньше 3.

Вы проверяли?

Цитата(Dem_max @  27.9.2012,  10:39 Найти цитируемый пост)
Скорее всего выход за границы массивов. 

Вот. Понавставляйте проверок разных, будет Вам счастье.

А точку кода, на которой программа рушится, Вы определили?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Чупакабро
Дата 27.9.2012, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.2.2007

Репутация: нет
Всего: 4



блин, вот
Код

pPhMeshes[iMeshIndex]=(Mesh*)malloc(sizeof(Mesh)*iPhMeshCount);

могу всю функцию запостить, там 100500 строк)
да создется mesh, там со всеми другими мемберами все в порядке, значения присваиваются.

Добавлено @ 09:49
 
feodorv, вылет происходит вот именно на этой строчке:
mesh->separatingAxis.resize(1);
а по поводу dwVertexCount - это число вершин в многоугольнике. которое не может быть меньше 3. ну, по хорошему надо проверку поставить...

Добавлено @ 09:52
косяк именно с std::vector, только вот в чем он заключается, не пойму...

Это сообщение отредактировал(а) Чупакабро - 27.9.2012, 09:54
--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue.
PM MAIL   Вверх
feodorv
Дата 27.9.2012, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Чупакабро @  27.9.2012,  10:45 Найти цитируемый пост)
блин, вот

Нет, ну а там инициализации разные, в том числе и separatingAxis?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
mes
Дата 27.9.2012, 09:54 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Чупакабро @  27.9.2012,  08:45 Найти цитируемый пост)
да создется mesh, там со всеми другими мемберами все в порядке, значения присваиваются.могу всю функцию запостить, там 100500 строк)

malloc, realloc не создают С++ обьектов, коим является стд::вектор.. и даже 100500 маллоков его не создатут.. new в помощь..


--------------------
PM MAIL WWW   Вверх
feodorv
Дата 27.9.2012, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Вот же подсказывают:
Цитата(rodnover @  27.9.2012,  10:34 Найти цитируемый пост)
mesh = new Mesh();

Ну или массив этих мешей...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0653 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.