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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
#1

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

24.06.2013, 10:36. Просмотров 419. Ответов 9
Метки нет (Все метки)

Есть структура вида:
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;    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 10:36     Метод push_back заносит некорректные данные в вектор
Посмотрите здесь:

Немного поясните(вектор, push_back) - C++
Вот вам код, господа #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { vector&lt;int&gt; m; for...

Как положить в вектор структур значение через push_back - C++
есть вот такой вектор vector&lt;struct&lt;Point&gt;&gt; в структуре point , есть координата икс. struct Point { double Point_x; ...

Есть вектор пар, как положить туда значение пары через push_back - C++
Есть вот такой вектор vector&lt;vector&lt;pair&lt;int, int&gt;&gt;&gt; number_pair; размер number_pair.size() у меня определен изначально, а вот...

Метод push_back() класса vector - C++
Пишу алгоритм динамического программирования, на каждой итерации в множество векторов возможно добавление вектора из этого же множества, но...

Как ведет себя cin, если пользователь вводит некорректные данные? - C++
Читаю C++ Primer Plus by Stephen Prata. В седьмой главе у него есть следующий пример. // lotto.cpp -- probability of winning ...

Вставить данные типа float в вектор - C++
Вставить данные типа float введенные с клавиатуры Если чётный номер - в конец, нечет, - в начало вектора. #include &lt;iostream&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Каратель
Эксперт С++
6553 / 3973 / 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
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,494
Записей в блоге: 4
24.06.2013, 11:31     Метод push_back заносит некорректные данные в вектор #6
@hdnn, конструктор копий и присваивания покажите.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; struct Client { vector &lt;string&gt; login; vector...

Записать из файлов данные о людях (ф.и.о. , дата рожд) в вектор - C++
Всем халоу, тут такая задачка: надо из двух файлов с разными данными о людях (1 файл - уникальный код, ф.и.о. , дата рожд, номер тел; 2...

Как правильно должен быть написан метод возвращающий ссылку на вектор - C++
Доброе время форумчане! Ну собственно сама тема говорит Есть класс class SoftwareCore { private: public:

Push_back - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;iterator&gt; #include &lt;algorithm&gt; using namespace std; int main() { ...


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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,494
Записей в блоге: 4
24.06.2013, 13:23     Метод push_back заносит некорректные данные в вектор #10
Цитата Сообщение от hdnn Посмотреть сообщение
В шапке под спойлером.
Извините просмотрел...
Yandex
Объявления
24.06.2013, 13:23     Метод push_back заносит некорректные данные в вектор
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru