Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в run-time изменить размер структуры? в С++ 
:(
    Опции темы
Chuck
Дата 20.1.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: нет
Всего: 9



Господа!
Прошу разъяснить мне, как это сделать, сабж!
Поясню, что я хочу!
Есть структура
Код

struct st_list {
    int id, update;
    string url, referrer;
};

int main()
{
    st_list *list[100];
    .....
    list = (* struct st_list)realloc(list, sizeof(st_list) * 10000);
}


Т.е. изначально задано 100 элементов структуры. Как эту сотню расширить до 1000, 10000?
Знаю, что копать нужно в сторону realloc, но что то не получается у меня. Код компилируется, но не выполняется.

Это сообщение отредактировал(а) Chuck - 20.1.2006, 15:11
PM MAIL WWW GTalk   Вверх
Mayk
Дата 20.1.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Использовать std::vector и еже с ними.
realloc - это си, а не с++.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
chaos
Дата 20.1.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



ну а если всеже решил использовать свой метод, то тогда надо
делать так
Код

int main()
{
    st_list *list = (struct st_list *)malloc(sizeof(st_list) * 100);
    .....
    list = (struct st_list *)realloc(list, sizeof(st_list) * 10000);
}


Добавлено @ 15:52
ну а так Mayk дело говорит, зачем усложнять себе жизнь всякими маллокаи реаллоками и тп лабудой
Добавлено @ 15:55
ну и не забывай в конце делать free

Это сообщение отредактировал(а) chaos - 20.1.2006, 15:53
PM WWW   Вверх
azesmcar
Дата 20.1.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата

ну а так Mayk дело говорит, зачем усложнять себе жизнь всякими маллокаи реаллоками и тп лабудой
Добавлено @ 15:55
ну и не забывай в конце делать free


Цитата

Использовать std::vector и еже с ними.


Полностью согласен...Нет смысла в realloc..но если уж хочется так то лучше уж new, delete...твой realloc все равно тоже самое делает (сперва удаляет потом заново создает)..

Это сообщение отредактировал(а) azesmcar - 20.1.2006, 17:03
PM   Вверх
blackofe
Дата 20.1.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 29.11.2005

Репутация: 4
Всего: 4



Chuck
все предыдущие ораторы дело говорят. твоя главная ошибка в том, что ты пытаешься реаллокировать память, которую ты не аллокировал (пардон мой френч):

The realloc function changes the size of an allocated memory block.

другими словами, realloc можно использовать для реаллокации памяти, предварительно аллокированной с помощью malloc, calloc, т.е. выделенной в куче.

своим же объявлением массива ты говоришь компилятору, чтобы он озаботился размещением его в стеке - скажем так, это есть са-авсем другое место smile.

ну и, если уж мы имеем в руках с++, да еще с stl, то грех этим не воспользоваться.
PM MAIL   Вверх
Chuck
Дата 22.1.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: нет
Всего: 9



Спасибо, на самом деле я просто запутался, но знал, что нужно выделять malloc-ом, просто из-за многочисленных ошибок, я упустил это!
Вот пример с изменением размера вектора
Код

#include <cstdlib>
#include <iostream>
#include <string.h>
#include <vector>

using namespace std;

struct st_list {
       int id, update;
       string url;
       };
       
int main(int argc, char *argv[])
{
    vector<st_list> list(100);
    list.resize(130);    
    list[120].url = "http://blogs.uz/";
    cout << list[120].url;
    return 0;
}

PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.