2010-11-04 2 views
0

меня это заявление многомерного векторавектор инициализации с размером, невозможно очистить

std::vector< vector < vector <ofxImage> > > front_objects; 

Затем я отправить его в мой класс при его создании:

Catalog_object * temp = new Catalog_object(&front_objects, numTag); 

А потом выполнить следующие :

Catalog_object::Catalog_object(vector< vector < vector <ofxImage> > > * _front_objects, int numTag) { 
    front_objects=_front_objects; 
    if (front_objects->size()<numTag+1) { 
     front_objects->resize(numTag+1); 
    } 
} 

То, что я хочу сделать, это заполнить основную front_object s с векторами ofxImages из Catalog_objects, которые могут делиться некоторыми векторами векторов ofImages.

Проблема заключается в том, что «иногда» вектор инициализации с мусором и при попытке очистить его с

front_objects[numTag].resize(2); 

сбои программы с EXC_BAD_ACCESS

При изменении размера его с изменением размера(), не должны он заполняется пустыми векторами?

Благодаря

Марк

UPDATE

Я пытался делать, как это, но я получаю "неинициализированным ссылки УЧАСТНИКА Catalog_object :: front_objects '".

Catalog_object::Catalog_object(vector< vector < vector <ofxImage> > > & _front_objects, int numTag) { // CHANGED * FOR & 
    std::vector< vector < vector <ofxImage> > > & front_objects; // CHANGED * FOR & 
    front_objects=_front_objects; 
    if (front_objects.size()<numTag+1) { 
     front_objects.resize(numTag+1); 
    } 
    front_objects[numTag].resize(2); 
} 


std::vector< vector < vector <ofxImage> > > front_objects; 
Catalog_object * temp = new Catalog_object(front_objects, numTag); // REMOVED & 
+0

Тангенциальное комментарий:. Это действительно канонический пример, когда определения типов будет хорошо! –

+0

Я новичок C++, я проверю typedefs – Marc

+0

Я только что узнал, как использовать typedefs. Очень легко и полезно! http://www.functionx.com/cpp/keywords/typedef.htm – Marc

ответ

2

Скорее всего в

front_objects[numTag].resize(2); 

numTag имеет неверный индекс.

Без соответствующего кода сложно сказать. Эффективно вы говорите, что каждый раз, когда вы ходите на кухню, вы слышите странный звук. Картина кошки, которая застряла между двумя моментами, делает ее вероятной, что это кошка, но может быть чем-то еще. :-)

Приветствия & НТН,

+0

Спасибо Alf, но я уже позаботился об этом, когда сделал front_objects-> resize (numTag + 1); , или я ошибаюсь? Я беспокоюсь, что я мог бы возиться с указателями («указывая на неправильные места») – Marc

+1

@Mark: oh '****' (censored). Вы имеете в виду, что этот запрос изменения размера находится внутри вашего конструктора, где 'front_objects' объявлен как указатель? О, о. Если это так, вы используете этот указатель как массив, а затем вот как исправить: передайте его по ссылке вместо указателя. То есть, замените ваш формальный параметр '*' на '&' и замените '->' на '.' и отпустите оператор адреса в вызове. Cheers & hth., –

+0

Спасибо Alf. Да, изменение размера внутри конструктора Catalog_object, возможно, в обновлении, которое я сделал для моего кода, более яснее. Я попытался применить ваши предложения, но получаю ошибку «неинициализированный ссылочный элемент». Я пока не очень хорошо разбираюсь в указателях, поэтому, наверное, сейчас я сделал что-то еще не так!: S Мое намерение состоит в том, что все модификации всегда выполняются в тех же front_objects – Marc

Смежные вопросы