【发布时间】:2017-06-14 14:15:27
【问题描述】:
我正在编写一些简单的堆栈操作,我的数据结构是一个数组。
#define DEFAULT_VAL 10 //in a separate Header file
int *stacky = (int*) malloc (default_size * sizeof(int));
目标是编写一个函数来动态设置 Stack 的大小,同时确保元素不丢失。
这是我目前所拥有的:
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的方式你试图使用它们(作为变量)。 -
您在哪里定义
stacky并不是 100% 清楚,但在 C 中,您不能编写像变量在函数外部时显示的初始化程序。 -
请注意,在代码
void Sizer( int size) { /* newline */ #undef DEFAULT_VAL /* newline */ #define DEFAULT_VAL size /* newline */ maxSize = size;中,您实际上并未使用DEFAULT_VAL。size的定义很奇怪。请记住,预处理器会在编译时进行文本替换。代码可以工作——但是使用预处理器来做你似乎想要做的事情是不正当的,特别是因为宏实际上并没有被使用。 -
感谢您指出这一点!我知道预处理器的作用,但我似乎现在才明白我的错误。我删除了
#undef DEFAULT_VAL和#define DEFAULT_VAL size行 -
阅读flexible array members。您可能会发现非常很有用
标签: c stack dynamic-memory-allocation realloc