elusive 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба Здравствуйте, уважаемые форумчане. Цель простая, но в своих идеях не уверен. Хочу организовать стек произвольной глубины с динамической памятью. Будет класс стека. Но ведь когда мы выделяем динамическую даже память, все равно нужно указывать СКОЛЬКО ее выделять. Как сделать глубину произвольную - запутался... :( Подскажите please как это обычно делается! Заранее спасибо!!!!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба Подскажите please как это обычно делается! Память, виртуальна. Физически она появляется только когда происходит запись в нее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elusive 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба Память, виртуальна. Физически она появляется только когда происходит запись в нее. ну например вызвали функцию push, выделили память new(1). и так каждый раз? непонятно тогда как хранить указатели... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба ну например вызвали функцию push, выделили память new(1). и так каждый раз? непонятно тогда как хранить указатели... Нет. Я имею в виду что malloc память физически не выделяет. А если вы хотите с указателями, то есть двунаправленные списки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба Нет. Я имею в виду что malloc память физически не выделяет. А если вы хотите с указателями, то есть двунаправленные списки. Вы уж очень философски относитесь к понятию "выделяет". Так можно дойти до того, что ее "выделяет" начальник отдела снабжения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба список что-ли нужен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба список что-ли нужен? Ну откуда я знаю? Я что, телепат? Или хотя бы шизофреник? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 9 апреля, 2011 Опубликовано 9 апреля, 2011 · Жалоба ну например вызвали функцию push, выделили память new(1). и так каждый раз? непонятно тогда как хранить указатели... Для начала, ознакомьтесь с тем, как работают современные компиляторы и четко уясните себе, какие вообще типы памяти бывают. Хотя бы для того, чтобы ваши вопросы были более внятные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elusive 0 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба Для начала, ознакомьтесь с тем, как работают современные компиляторы и четко уясните себе, какие вообще типы памяти бывают. Хотя бы для того, чтобы ваши вопросы были более внятные. прошу прощения за невнятность, наверно я действительно так выражаюсь. в моем задании сказано использовать динамическую память, оператор new, про списки не указывается. вот момент, который остается туманным: кладем в стек 1 число: a=new int(1); a=value; кладем в стек еще 1 число: b=new int(1); b=value; как можно организовать хранение неопределенного числа переменных a,b,... ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба прошу прощения за невнятность, наверно я действительно так выражаюсь. Для начала, к примеру, вам сюда: http://www.dreamincode.net/forums/topic/10...-in-c-tutorial/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба в моем задании сказано использовать динамическую память, оператор new, про списки не указывается. в c++ есть такая штука - vector, может быть об этом речь? или надо самому реализацию стека сделать? тогда через односвязный список Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба тогда через односвязный список Вовсе не обязательно! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nk@ 0 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба Вовсе не обязательно! Намек понятен, тока realloc() не во всех реализациях stdlib имеется. Надо-бы топикстартеру платформу и ОС уточнить :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба Намек понятен, тока realloc() не во всех реализациях stdlib имеется. Надо-бы топикстартеру платформу и ОС уточнить :) А на кой в стеке realloc? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nk@ 0 11 апреля, 2011 Опубликовано 11 апреля, 2011 (изменено) · Жалоба А на кой в стеке realloc? Нужно выделить память под хранение данных стека. Первый раз понятно - malloc(). Далее надо добавить в стек данных, для чего нужно увеличить "вместилище" стека. Как - realloc() подходит идеально. А без realloc() - связаный список указателей. Что-нить типа static int *stack_mem = NULL; static unsigned int stack_pointer = 0; int* stack_push(int data) { stack_mem=(int* )realloc(stack_mem, (stack_pointer+1)*sizeof(int)); if(stack_mem==NULL) return NULL; //out of mem stack_mem[stack_pointer++] = data; return (stack_mem + stack_pointer - 1); } int* stack_pop(int* data) { if(stack_pointer) { *data = stack_mem[--stack_pointer]; return (stack_mem + stack_pointer); } return NULL; //no data in stack } PS: Код есс-но надо доработать, я его за 10 сек "на коленке" набросал, чтоб идею пояснить :) Изменено 11 апреля, 2011 пользователем nk@ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться