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

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

28.01.2016, 09:03. Показов 1773. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
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
Есть определенный класс - длинная арифметика. Не идеальный - хранение данных исполнено в виде динамического массива типа short int, каждая...

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

2
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
28.01.2016, 13:25
у меня вот такой вот вариант ничем по существу от вашего не отличающийся собрался без проблем
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
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.01.2016, 13:49

  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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2016, 13:49
Помогаю со студенческими работами здесь

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

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

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

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 = tmp.begin(); for (int m = 0;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru