我正在写一些简单的堆栈操作,其数据结构是一个数组。在堆栈上使用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中,当变量在函数之外时,你不能写出如图所示的初始化器。 –
请注意,在代码中'void Sizer(int size) {/ * newline */ #undef DEFAULT_VAL/* newline */ #define DEFAULT_VAL size/* newline */ maxSize = size;',实际上使用'DEFAULT_VAL'。 “尺寸”的定义很奇怪。请记住,预处理器将在编译时进行文本替换。代码可以工作 - 但使用预处理器来做你似乎试图做的事情是不正当的,特别是因为宏没有被实际使用。 –