Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 11.09.2015
Сообщений: 7
1

Std:: vector<Structure>, выделение памяти

28.01.2016, 09:03. Показов 1239. Ответов 2

Уважаемые, программисты, помогите новичку исправить ошибку, при создании вектора структур.

Подскажите, пожалуйста, где я неправильно выделила память или что не правильно инициализировала.
Я новичок, не судите строго, в данном коде сократила все для ясности, поэтому прошу не писать, что я что-то не подключила или не объявила.
Код компилируется до строчки - " vec.push_back(obj);" следом переходит в файл construct.h и указывает на строчку
-> " _STLP_PLACEMENT_NEW (__p) _T1(__value);"


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
// h - file of class TDataBase
 
#include <vcl.h>
#pragma hdrstop
 
//#include String, Vector... все есть.
 
#pragma package(smart_init)
#pragma warn -8060
#define _STLP_PLACEMENT_NEW new
 
 
class TDataBase
{
public:
  __fastcall TDataBase();
  __fastcall ~TDataBase();
 
    struct  TDB
 
  {
    String key_tdb;
    String name_tdb;
 
    TDB (String key_tdb2, String name_tdb2)
    {
    this->key_tdb = key_tdb2;
    this->name_tdb = name_tdb2;
    
    }
 
  };
 
  TDB *obj;
  std::vector<TDB*> vec;
  std::vector<TDB*>::iterator it_n;
 
 //functions
  String  __fastcall getElemV(int SelIndex);
  void  __fastcall addCert();
};

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// cpp - file of calss TDataBase
 
#include <TDataBase.h>
 
String __fastcall TDataBase::getElemV(int SelIndex)
{
   String str_cert_name;
  for (it_n = vec.begin(); it_n !=vec.end(); ++it_n)
       {
 
        str_cert_name =  it_n[SelIndex]->name_tdb  ;
 
       }
 
return str_cert_name;
}
 
 
void  __fastcall TDataBase::addCert()
{
 
    TDataBase();
 
     obj = (TDB*)malloc(sizeof(TDB));
 
 // цикл для поиска информации
 
 
  while(/*условие */)
{
    //Функция получает ключ
    f1()
     {
        
         String *pubKeyStr = &pubKeyStr2;   /*  String pubKeyStr2 */
 
     }
 
 
    //Функция получает Имя
    f2()
      {
 
             String name1 = s_name.c_str() ;       /* std::string s_name;*/
             String *str_ptr_name = &name1;
      }
 
 
     obj->key_tdb = *pubKeyStr;
     obj->name_tdb = *str_ptr_name;
 
 
     vec.push_back(obj);
 
 
     free(obj);
}
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2016, 09:03
Ответы с готовыми решениями:

Ошибка: E2034 Cannot convert 'int' to 'std::vector<std::vector<TRabbitCell,std::allocator<TRabbitCell>>...
Есть двухмерный вектор: std::vector&lt;std::vector&lt;TRabbitCell&gt; &gt; *cells(5, 10); Пытаюсь...

Выделение памяти (CodeGear RAD Studio 2009 - C++ builder). Выделение памяти - консоль vs SDIApp
Есть определенный класс - длинная арифметика. Не идеальный - хранение данных исполнено в виде...

TList vs. std::vector
Если кто-то знает, то подскажите, пожалуйста, в чем имеются принципиальные (ощутимые на практике)...

Зависает программа из-за std::vector
void __fastcall TAdministratorForm::RouteButtonClick(TObject *Sender) { HideAll();...

2
Модератор
3332 / 2113 / 343
Регистрация: 13.01.2012
Сообщений: 8,244
28.01.2016, 13:25 2
у меня вот такой вот вариант ничем по существу от вашего не отличающийся собрался без проблем
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <vector>
 
#pragma warn -8060
#define _STLP_PLACEMENT_NEW new
 
 
class TDataBase
{
public:
  __fastcall TDataBase();
  __fastcall ~TDataBase();
 
    struct  TDB
 
  {
    String key_tdb;
    String name_tdb;
 
    TDB (String key_tdb2, String name_tdb2)
    {
    this->key_tdb = key_tdb2;
    this->name_tdb = name_tdb2;
 
    }
 
  };
 
  TDB *obj;
  std::vector<TDB*> vec;
  std::vector<TDB*>::iterator it_n;
 
 //functions
  String  __fastcall getElemV(int SelIndex);
  void  __fastcall addCert();
};
 
String __fastcall TDataBase::getElemV(int SelIndex)
{
   String str_cert_name;
  for (it_n = vec.begin(); it_n !=vec.end(); ++it_n)
       {
 
        str_cert_name =  it_n[SelIndex]->name_tdb  ;
 
       }
 
return str_cert_name;
}
 
 
void  __fastcall TDataBase::addCert()
{
 
    TDataBase();
 
     obj = (TDB*)malloc(sizeof(TDB));
 
 
while(true)
{
         String *pubKeyStr = 0;   /*  String pubKeyStr2 */
         String *str_ptr_name = 0;
 
 
     obj->key_tdb = *pubKeyStr;
     obj->name_tdb = *str_ptr_name;
 
 
     vec.push_back(obj);
 
 
     free(obj);
}
 
}
0
Эксперт С++
8289 / 6120 / 613
Регистрация: 10.12.2010
Сообщений: 28,609
Записей в блоге: 30
28.01.2016, 13:49 3

  1. C++
    1
    
    TDB *obj;
    C++
    1
    
    obj = (TDB*)malloc(sizeof(TDB));
    Зачем использовать malloc в С++ тем более относительно класса, возможно new
  2. Вероятно если динамически выделяете память под объекты "внутри" класса нужно определить конструктор копирования ипр. смотри следующий пункт:
  3. Правило трёх

  4. C++
    1
    
    std::vector<TDB*>::iterator it_n;
    Зачем вам итератор как член класса, итераторы используются локально для прохода по контейнеру, ибо они могут стать невалидными в любой момент.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2016, 13:49

Rad Studio XE3 и std::vector
такая проблема у меня Rad Studio XE3 вообще не хочет переваривать std::vector :( пишу допустим:...

Конвертирование std::vector в TByteDynArray и обратно
Приветствую всех. Есть вектор байт (std::vector&lt;BYTE&gt;). Необходимо создать переменную типа...

Std::vector push_back vs emplace_back
Бывают ли случаи, когда push_back невозможно реализовать через emplace_back, либо такая реализация...

std::vector доступ по индексу vs доступ по итератору
std::vector&lt;int&gt; tmp; int i = 0; tmp.resize(1000000); std::vector&lt;int&gt;::iterator it...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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