Форум программистов, компьютерный форум CyberForum.ru

Метод push_back заносит некорректные данные в вектор - C++

Восстановить пароль Регистрация
 
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
24.06.2013, 10:36     Метод push_back заносит некорректные данные в вектор #1
Есть структура вида:
C++
1
2
3
4
5
6
7
struct PadStyleDef
{
    std::string name;
    std::string padShapeType;
    float shapeWidth;
    float shapeHeight;
};
И есть две переменные типа этой структуры. Одна из них - вектор. В процессе работы я заполняю все поля обычной переменной и через push_back добавляю в вектор - всё как обычно. Но почему-то правильно отрабатывает далеко не всегда.
Например, заполнив структуру, я имею следующие данные в переменной:
C++
1
2
3
4
    name == "(Default)";
    padShapeType == "Ellipse";
    shapeWidth == 60.000000;
    hapeHeight == 60.000000;
А после добавления этой переменной в вектор, элемент оного хранит данные такого вида:
C++
1
2
3
4
    name == "НННН(Default)";
    padShapeType == "ННННEllipse";
    shapeWidth == 2.102e-044#DEN;
    hapeHeight == 60.000000;
На второй и последующих итерациях элементы вектора имеют уже такой вид:
C++
1
2
3
4
    name == <Bad Ptr>;
    padShapeType == <Bad Ptr>;
    shapeWidth == 5.605e-045#DEN;
    hapeHeight == 2.102e-044#DEN;
Что я делаю неправильно?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
bool CPcb::ReadPadViaStyle(std::string srcStr)
{   
    pcre * re = NULL;
    int options = 0;
    const char *error = NULL;
    int erroffset=0;
    std::string pattern = PAD_STYLE_DEF;         
    re = pcre_compile ((char*)pattern.c_str(), options, &error, &erroffset, NULL);      
    if (!re)
        return FALSE;
    else
    {
        PadStyleDef psd;
        int j=0;
        int count=0;
        int k=0;
        int ovector[30];
        const char *psubStrMatchStr;
        
        while((count=pcre_exec(re, NULL, (char *) srcStr.c_str(),strlen(srcStr.c_str()),j,PCRE_NOTEMPTY,ovector,30))>=0)
        {
            pcre_get_substring(srcStr.c_str(),ovector,count,0,&psubStrMatchStr);
            switch(k)
            {
                case 0: psd.name = psubStrMatchStr; break; 
                case 2: psd.padShapeType1 = psubStrMatchStr; break;
                case 3: psd.shapeHeight1 = atof(psubStrMatchStr); break;
                case 4: psd.shapeWidth1 = atof(psubStrMatchStr); break;
                case 6: psd.padShapeType2 = psubStrMatchStr; break;
                case 7: psd.shapeHeight2 = atof(psubStrMatchStr); break;
                case 8: psd.shapeWidth2 = atof(psubStrMatchStr); break;
            }
            pcre_free_substring(psubStrMatchStr);
            j=ovector[1]+1;
            if(k==8) 
            {
                psd.id=m_padStyleDef.size();
                break;
            }
            k++;            
        }
        m_padStyleDef.push_back(psd);    //Злополучная строчка
    }
    return TRUE;    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.06.2013, 11:13     Метод push_back заносит некорректные данные в вектор #2
@hdnn, перед вызовом push_back() проверьте что в psd лежит. Так как строку копируете из обычного char*, возможно просто psubStrMatchStr уже кривой в момент записи в psd.name и пр.
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
24.06.2013, 11:22  [ТС]     Метод push_back заносит некорректные данные в вектор #3
@Tulosba, к сожалению, проблема не в этом. Скрин:
Миниатюры
Метод push_back заносит некорректные данные в вектор  
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.06.2013, 11:24     Метод push_back заносит некорректные данные в вектор #4
вы часом не в Release mode дебажите?
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
24.06.2013, 11:27  [ТС]     Метод push_back заносит некорректные данные в вектор #5
Нет, в Debug
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
24.06.2013, 11:31     Метод push_back заносит некорректные данные в вектор #6
@hdnn, конструктор копий и присваивания покажите.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.06.2013, 11:32     Метод push_back заносит некорректные данные в вектор #7
@hdnn, так у Вас структуры похоже разные. Где поле id у элемента, который в векторе?
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
24.06.2013, 11:42  [ТС]     Метод push_back заносит некорректные данные в вектор #8
@IGPIGP, какой, простите, конструктор? Код, в котором заполняю структуру и вектор? В шапке под спойлером.
@Tulosba, нет слов... Спасибо. Clean project и Build project решили проблему). Хотя для меня такое поведение остаётся загадкой(переменные ведь одного типа)
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.06.2013, 11:49     Метод push_back заносит некорректные данные в вектор #9
Цитата Сообщение от hdnn Посмотреть сообщение
Хотя для меня такое поведение остаётся загадкой(переменные ведь одного типа)
Видимо среда глючит. Не учитывает все зависимости при построении проекта. Я например наблюдал как в Eclipse при изменении только *.h-файлов не пересобираются зависимые от них модули, которые явно не были изменены. В итоге получаем, что в одной программе разные части кода используют по факту разные структуры, несмотря на идентичность типов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2013, 13:23     Метод push_back заносит некорректные данные в вектор
Еще ссылки по теме:

C++ Как положить в вектор структур значение через push_back
C++ Вставить данные типа float в вектор
Push_back(1.) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
24.06.2013, 13:23     Метод push_back заносит некорректные данные в вектор #10
Цитата Сообщение от hdnn Посмотреть сообщение
В шапке под спойлером.
Извините просмотрел...
Yandex
Объявления
24.06.2013, 13:23     Метод push_back заносит некорректные данные в вектор
Ответ Создать тему
Опции темы

Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru