Что такое
best
Способ реализации динамически изменяющегося размера в C?Каков наилучший способ реализации динамического изменения размера в C?
Например, я хочу выделить объем памяти в стеке, но когда этот стек заполняется, память, выделенная в два раза для размещения новых данных и т.д.
Я стек реализован в минуту с помощью простой массив указателей void, таким образом я могу хранить указатели всех типов, поэтому он вполне можно использовать повторно. Когда я пытаюсь реализовать это, используя malloc()/realloc(), я запускаю ошибки при выполнении математики указателя из-за указателей void, не имеющих назначенного размера.
Что такое
лучше
правильно способ реализации динамически изменяемого стека в C?
EDIT:
Я пытался что-то вроде этого кода (проверки ошибок удалены), но я теперь понимаю, что я не могу взаимодействовать с недействительными указателями, как это. Поэтому я просто думаю, как сделать что-то вроде этого на законных основаниях. Это большое обучение упражнение для меня, как я действительно никогда не были подвержены C.
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
static int index = 0;
void* CreateStack(void)
{
void *stack = malloc(INITIAL_STACK_SIZE);
return stack;
}
void* Pop(void *stack)
{
return stack + index--;
}
void Push(void *stack, void *value)
{
*(stack + index) = value;
}
void FreeStack(void *stack)
{
free(stack);
}
Пожалуйста, разместите код. Сами указатели должны хранить фиксированный объем памяти для хранения, независимо от того, на что они указывают. –
А что вы подразумеваете под «лучшим»? – 2010-01-12 23:09:14
В основном два способа: 1) использовать растущий массив, 2) использовать связанный список. То, что лучше всего работает (или правильно) для вас, зависит от того, что вам нужно. – MAK