Я пишу несколько простых операций стека с моей структурой данных, являющейся массивом.Использование realloc() на стеке
#define DEFAULT_VAL 10 //in a separate Header file
int *stacky = (int*) malloc (default_size * sizeof(int));
Цель состоит в том, чтобы написать функцию, чтобы динамически установить размер стека, обеспечивая при этом, что элементы не теряются.
Вот то, что я до сих пор:
void Sizer(int size)
{
#undef DEFAULT_VAL
#define DEFAULT_VAL size
maxSize = size;
int *newbuffer = (int*) realloc (stacky, size);
if(newbuffer == NULL) //checking if the 'realloc' was successful :)
{
printf("PROBLEM HERE :)");
}
else
{
stacky = newbuffer;
}
}
В моей main()
функции:
int main()
{
int i;
for(i=1; i<15; i++)
{
push(i);
}
Sizer(9);
displayStack();
Sizer(17);
displayStack();
}
Выход есть:
DEFAULT_VAL is now: 9
9. 9
8. 8
7. 7869816
6. 7877384
5. 17278
4. 385207786
3. 3
2. 2
1. 1
DEFAULT_VAL is now: 17
9. 9
8. 8
7. 7869816
6. 7877384
5. 17278
4. 50331651
3. 3
2. 2
1. 1
Любые советы оценили! Благодаря
Вы не можете использовать '# define' так, как вы пытаетесь их использовать (как переменные). – tkausl
Это не 100% понятно, где вы определяете 'stacky', но на C вы не можете написать инициализатор, как показано на рисунке, когда переменная находится вне функции. –
Обратите внимание, что в коде 'недействительным Sizer (размер INT) {/ * символ новой строки */ #undef DEFAULT_VAL/* символ новой строки */#define размер DEFAULT_VAL/* символ новой строки */ MaxSize = размер;', вы не фактически используйте 'DEFAULT_VAL'. Определение «размер» является нечетным. Помните, что препроцессор выполнил бы замену текста во время компиляции. Код может работать, но использование препроцессора для выполнения того, что вы пытаетесь сделать, является извращенным, тем более, что макрос фактически не используется. –