在堆栈上使用realloc()

在堆栈上使用realloc(),c,stack,dynamic-memory-allocation,realloc,C,Stack,Dynamic Memory Allocation,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_VA

我正在编写一些简单的堆栈操作,数据结构是数组

#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;     
    }
}
在my
main()
函数中:

int main()
{
  int i;
  for( i=1; i<15; i++) 
   {
     push(i);
   }
  Sizer(9);
  displayStack();
  Sizer(17);
  displayStack();
}
任何建议都将不胜感激!从手册页中感谢您:

函数的作用是:改变内存块的大小 通过ptr设置大小字节

因此,不是:

int *newbuffer = (int*) realloc (stacky, size);
你可能想要

int *newbuffer = (int*) realloc (stacky, size * sizeof(int));

顺便说一句:使用
malloc
和朋友时不需要强制转换。请参见

您不能使用
#定义
是您试图使用它们(作为变量)的方式。您在哪里定义
stacky
,还不是100%清楚,但在C中,您不能编写变量在函数外部时所显示的初始值设定项。请注意,在代码
中,void Sizer(int size)是无效的{/*newline*/#undef DEFAULT_VAL/*newline*/#define DEFAULT_VAL size/*newline*/maxSize=size;
,您实际上没有使用
DEFAULT_VAL
。定义为
size
很奇怪。请记住,预处理器会在编译时进行文本替换。代码可以工作,但使用预处理器做什么你这样做似乎有悖常理,特别是因为宏实际上没有被使用。谢谢你指出这一点!我知道预处理器的作用,但我似乎现在才明白我的错误。我删除了
#undef DEFAULT\u VAL
#define DEFAULT\u VAL size
这两行。你可能会发现这很有用删除了该转换后,从“代码>空白”>代码>到 int *>代码> @ @阿俊-听起来奇怪,“代码>无效转换<代码> -你使用C++编译器而不是C编译器吗?我使用DEV-C++ + @ ARJUN——所以你可能用C++编译器编译你的C代码。C和C++是两种不同的语言。对于许多基本的东西非常相似,但不完全相同。如果你想编写C++代码,请确保把它编译成C代码。@阿俊- BTW:铸造不是我答案的核心。重要的是,<代码> RealCal调用使用错误的大小。.
int *newbuffer = (int*) realloc (stacky, size * sizeof(int));