在堆栈上使用 realloc()
Using realloc() on a Stack
我正在编写一些简单的堆栈操作,我的数据结构是一个数组。
#define DEFAULT_VAL 10 //in a separate Header file
int *stacky = (int*) malloc (default_size * sizeof(int));
objective就是写一个函数,在保证元素不丢失的情况下动态设置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
如有任何建议,我们将不胜感激!谢谢
来自手册页:
The realloc() function changes the size of the memory block pointed
to by ptr to size bytes.
所以代替:
int *newbuffer = (int*) realloc (stacky, size);
你可能想要
int *newbuffer = (int*) realloc (stacky, size * sizeof(int));
顺便说一句:使用 malloc
和朋友时不需要转换。参见 Do I cast the result of malloc?
我正在编写一些简单的堆栈操作,我的数据结构是一个数组。
#define DEFAULT_VAL 10 //in a separate Header file
int *stacky = (int*) malloc (default_size * sizeof(int));
objective就是写一个函数,在保证元素不丢失的情况下动态设置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
如有任何建议,我们将不胜感激!谢谢
来自手册页:
The realloc() function changes the size of the memory block pointed to by ptr to size bytes.
所以代替:
int *newbuffer = (int*) realloc (stacky, size);
你可能想要
int *newbuffer = (int*) realloc (stacky, size * sizeof(int));
顺便说一句:使用 malloc
和朋友时不需要转换。参见 Do I cast the result of malloc?