在C中为数组动态分配内存

时间:2014-09-03 17:14:44

标签: c arrays dynamic

我只是想问一下,有没有办法在运行时在C中动态地为现有的元素数组分配内存?例如..如果我声明int arr [25];然后我将能够在我的数组中最多采取25个整数..但如果用户想要输入更多的整数怎么办...但我们事先不知道多少?另外,我不想通过分配类似int arr [500]的内容来浪费内存;只是为了确保用户没有超出我的阵列的上限:(我真的很困惑和悲伤,因为我无法找到解决方案.. C甚至支持这样的事情?如果没有,那么使用哪种编程语言会更容易解决这样的问题?PS->我是编程的新手,所以如果这是一个菜鸟问题,我很抱歉。:/

3 个答案:

答案 0 :(得分:3)

你需要使用malloc()/ realloc()进行动态内存分配,并在完成后使用free()释放它。

int* a = malloc(25*sizeof(int));

//use a like array...a[0]...to a[24]

// realloacte if you need to grow it 
a = realloc(a,50);

free(a);

上面的逻辑应该在C中使用。如果你写的是C ++,你应该使用STL std::vector<T>

答案 1 :(得分:2)

如果它是一个数组,你可能真的想要检查calloc()函数:

void* calloc (size_t num, size_t size);

可以像这样使用:

/* calloc example */
#include <stdio.h>      /* printf, scanf, NULL */
#include <stdlib.h>     /* calloc, exit, free */

int main ()
{
  int i,n;
  int * pData;
  printf ("Amount of numbers to be entered: ");
  scanf ("%d",&i);
  pData = (int*) calloc (i,sizeof(int));
  if (pData==NULL) exit (1);
  for (n=0;n<i;n++)
  {
    printf ("Enter number #%d: ",n+1);
    scanf ("%d",&pData[n]);
  }
  printf ("You have entered: ");
  for (n=0;n<i;n++) printf ("%d ",pData[n]);
  free (pData);
  return 0;
}

如果您需要稍后调整数组大小,请查看realloc函数。 (是的,如果成功,它会保留原始数据)

答案 2 :(得分:1)

c++中有一个您可能觉得有用的课程,称为vector。您可以添加到向量的前面:myVector.push_front(myElement)并添加到向量的末尾:myVector.push_back(myElement)。如果此类功能对您非常重要,我建议您使用c++ vector

或者,您可以使用malloc()中的c函数在运行时请求特定数量的内存:char *five_chars = malloc(sizeof(char) * 5)。当您完成内存时,请务必致电free(five_chars)