Всем привет!
Сегодня потратил целый день и 2 бутылки пива на вылавливание глюка.
Поймал его, но совсем не понимаю в чем причина.
Значит так. перебираю вектор(весь лишний код удалил, оставил только глюк). В конец вектора забивается объект(с конструктором по умолчанию). В момент, когда емкость вектора равна его размеру... при добавлении очередного элемента - весь вектор херится(в нем остается только бред)
Не знаю точно в чем проблема, но проблема в условии(двойное условие - смотрите код), если оставить условие или любую из двух частей условия - глюк.
если сделать тупое условие (if 1==1), то все нормально, вектор растет и при достижении предела емкости увеличивает ее... пока не переберет вктор.
код:
Код:
vector<treeitem>::iterator iter0 = vec.begin();
vector<treeitem>::iterator iter_end = vec.end();
int count = 0;
/* перебрать весь вектор */
for (iter0 = vec.begin();
iter0 != iter_end;
++iter0 )
{
treeitem item = *iter0;
//iter_tmp = iter0-1;
HTREEITEM hndl = item.get_handle();
char *cap = item.get_caption();
HKEY key = item.get_key();
char *path = item.get_regpath();
if((key == HKEY_LOCAL_MACHINE) && (cap[0] == '.')) // здесь глюк, если заменить условие на if(1==1) то все ок, если же оставить любое из двух то глюк
{
treeitem tmpitem;
//currentitem.setitem(au_sfg_handle, current, 0, defvalue, HKEY_LOCAL_MACHINE, path);
vec.push_back(tmpitem);
/* это фигня для вывода в консольное окно */
/*
count ++;
char buffer[20];
_itoa(count, buffer, 10);
char buf0[65];
char buf1[65];
long s = vec.size();
long c = vec.capacity();
_itoa(s, buf0, 10);
_itoa(c, buf1, 10);
char *caret = "n";
console1.Write(buffer, strlen(buffer));
console1.Write(" ", 1);
console1.Write("(", 1);
console1.Write(buf0, strlen(buf0));
console1.Write("/", 1);
console1.Write(buf1, strlen(buf1));
console1.Write(")", 1);
console1.Write(" ", 1);
char buf[2];
console1.Read(buf, 2);
*/
//RegCloseKey(key);
}
}
Пожалуйста помогите кто может!!!