最简单的realloc方式

时间:2016-04-18 21:21:34

标签: c pointers memory realloc

我只是curoius是什么是重新分配内存的最简单方法? 在我的教员中,我们使用此代码重新分配内存(示例):

if (dat = fopen(argv[1], "rb")) {
    do {
      p = fread(&art, sizeof(ARTIKAL), 1, dat);
      if (p) {
        if (n == c) niz = (ARTIKAL *)realloc(niz, (c *= 2) * sizeof(ARTIKAL));
        niz[n++] = art;
      }
    } while (p);
    fclose(dat);

我正在考虑使用倒带功能,但我不能100%确定如何实现它。

1 个答案:

答案 0 :(得分:1)

为什么在此示例中需要rewind()函数?

你的例子似乎很好,有一件事可以改进:

if (dat = fopen(argv[1], "rb")) {
do {
  p = fread(&art, sizeof(ARTIKAL), 1, dat);
  if (p) {
    if (n == c) 
    {
       ARTIKAL *tmp = (ARTIKAL *)realloc(niz, (c *= 2) * sizeof(ARTIKAL));

       if (tmp == NULL)
       {
         printf("Not enough memory!\n")
         return 0;
       }
       else
       {
         niz = tmp;
       }

    niz[n++] = art;
  }
} while (p);
fclose(dat);

购买上面的代码,您的代码更安全,因为realloc在分配空间失败时返回NULL,然后您丢失数据。