在堆栈上使用 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?