Не удается получить элемент из std::vector
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 03.07.19 12:39
Оценка:
Есть некоторая структура aps типа addparstruct, в которой содержатся различные поля данных. В частности, в этой структуре есть поле Vimparray типа vector<long double> и поле timparray типа vector<string> .
Ниже приведён код для работы с переменной aps:

char  schartcorr[80];
string  stcorr;

//...

n = aps.Vimparray();
if (n>0)
{
    for (i=0; i<n/3; i++)
    {
        if (aps.timparray.size()>0)
        {
            stcorr = (string)(aps.timparray.at(i));
            strcpy(schartcorr,stcorr.c_str());
            sprintf(s2, " tcorr %d = %s \r\n",i+1,schartocorr);
            strcat(s,s2);
        }
        val1 = (long double)(aps.Vimparray.at(i*3));
        val2 = (long double)(aps.Vimparray.at(i*3+1));
        val3 = (long double)(aps.Vimparray.at(i*3+2));
        sprintf(s2," dV%dx(м/с)    % .15le    % .15le    % .9le \r\n",i+1,val1,val2,val3);
        strcat(s,s2);
    }
}


При этом во время запуска программы в отладчике происходит остановка действия программы на строке stcorr = (string)(aps.timparray.at(i)); с выводом сообщения:

Необработанное исключение по адресу 0x7581AAF2 (KernelBase.dll) в BallisticRG.exe: 0xC000041D: Во время вызова пользователя обнаружено необработанное исключение


После чего программа останавливается на этом месте.

Если заменить строку stcorr = (string)(aps.timparray.at(i)); на строку stcorr = (string)(aps.timparray[i]); , то тогда появится другое сообщение:

Необработанное исключение по адресу 0x6F01DF22 (msvcr110.dll) в BallisticRG.exe: 0xC000041D: Во время обратного вызова пользователя обнаружено необработанное исключение


При этом, если я закомментирую строки

if (aps.timparray.size()>0)
        {
            stcorr = (string)(aps.timparray.at(i));
            strcpy(schartcorr,stcorr.c_str());
            sprintf(s2, " tcorr %d = %s \r\n",i+1,schartocorr);
            strcat(s,s2);
        }


то тогда программа у меня нормально работает.

Что это всё означает? Как решить эту проблему?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.