2014-12-17 3 views
-1

Работа с win32 и попытка заполнить вектор в соответствии с полем со списком. Естественно, мне нужно очистить старые данные от вектора, но при этом vector-> clear(); функция приводит к пропущению оставшегося кода в инструкции switch.C++: для пропущенного цикла

case CMB_DATA1: 
    mDataSet1Yaxis->clear(); 

    for (unsigned int i = 1; i < mDataFile.mAllData.size(); i++) 
    { 
     mDataSet1Yaxis->push_back(mDataFile.mAllData[i][SendMessage(mUI->hDataSet1, CB_GETCURSEL, 0, 0)]); 
    } 
    cout << "iterated..."; 
    break; 

Я не уверен, но я предполагаю, что это что-то делать с mUI-> hDataSet1 прослыть неиспользованными? Что это значит и как я могу это исправить?


редактировать 1: объявления переменных

OpenDataFile mDataFile = OpenDataFile(); 
vector<vector<SooberCell>> mAllData; 

vector<SooberCell>* mDataSet1Yaxis; 

редактировать 2: Я думаю, что самая большая проблема здесь, вытекающие из mDataSet1Yaxis

+0

Каково определение метода clear()? Пожалуйста, опубликуйте это. – ha9u63ar

+3

начать итерацию с 0? – Neska

+2

Запустите в отладчике, установите контрольную точку в этом коде, проверьте, что возвращает 'mDataFile.mAllData.size()'. –

ответ

2

Похоже, что вы создали указатель вектор, но на самом деле не создавал экземпляр вектора, поэтому ваш указатель свисает, и, как таковое, вы испытываете неопределенное поведение.

Может быть, ваша линия:

vector<SooberCell>* mDataSet1Yaxis; 

Должен быть изменен на:

vector<SooberCell>* mDataSet1Yaxis = new vector<SooberCell>(); 
+0

Без вызова 'delete', код теряет память. – PaulMcKenzie

+0

@PaulMcKenzie true и без использования переменной его можно удалить :) пример не завершен. –

0

Как указал я забыл инициализировать mDataSet1Yaxis и, таким образом, ничего не происходит в пределах цикла для ...

+0

Нет, не ничего; неопределенное поведение; даже cout вне цикла не выполнялся. –

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