使用 realloc() 调整整数数组的大小

问题描述 投票:0回答:1

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

#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

如有任何建议,我们将不胜感激!谢谢

c dynamic-memory-allocation realloc
1个回答
3
投票

来自手册页:

realloc()函数改变指向的内存块的大小 to by ptr to size bytes.

所以代替:

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

你可能想要

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

顺便说一句:使用

malloc
和朋友时无需演员。请参阅我是否会转换 malloc 的结果?

© www.soinside.com 2019 - 2024. All rights reserved.