что не так с кодом при добавления элементов в массив больше 5 значений
Есть некая структура хранящая в себе std::vector
struct TRemoteQuestData
{
bool bActivate;
int nIndex;
int nQuestID;
bool bPreQuestCheckType;
std::vector<int> nVecPreQuestCondition;
TEventCondition GainCondition;
};
в этом коде когда достигает более пяти элемента в массиве происходит креш
TRemoteQuestData *pData = new TRemoteQuestData;
memset( pData, 0, sizeof(TRemoteQuestData) );
for( int j=0; j<10; j++ )
{
int nPreQuestID = pTable->GetFieldFromLablePtr( iIdx, sFieldNum._PreQuestCondition[j] )->GetInteger();
if( 0 == nPreQuestID )
continue;
pData->nVecPreQuestCondition.push_back( nPreQuestID );
}
крэш с надписью
Вызвано исключение: нарушение доступа для чтения.
**_Pnext** было 0x8.
но если прописать так то этой ошибки нету
TRemoteQuestData *pData = new TRemoteQuestData;
memset( pData, 0, sizeof(TRemoteQuestData) );
pData->nVecPreQuestCondition.resize(10);
for( int j=0; j<10; j++ )
{
int nPreQuestID = pTable->GetFieldFromLablePtr( iIdx, sFieldNum._PreQuestCondition[j] )->GetInteger();
if( 0 == nPreQuestID )
continue;
pData->nVecPreQuestCondition[j] = nPreQuestID;
}
объясните пожалуйста почему push_back крэшится и как это исправить, или все таки использовать 2-й вариант?
Ответы (1 шт):
Автор решения: Anaconda
→ Ссылка
Вы сами уже всё исправили. Лучше использовать второй вариант. Он более правильный (с точки зрения кода). Тем более у std::vector есть инициализирующий конструктор, в котором нельзя использовать 0 с помощью memset.