C中的realloc vs malloc

时间:2014-03-02 18:16:01

标签: c malloc realloc

我是C的新手,刚开始冒险进入动态分配数组的领域。

我认为我的malloc大部分已经失明,但对realloc提出了一些问题:

  1. 除了向指针添加内存空间外,还可以realloc用于其他任何事情吗?
  2. size变量总是必须是int吗?
  3. 下面会有类似的工作吗?

    float *L = NULL;
    
    int task_count = 5;
    
    L = (float*) realloc (L, task_count * sizeof(float));
    
  4. 如果我想进一步增加这个空间(在这种情况下是一个),我可以使用类似下面的内容吗?

    L = (float*) realloc (L, 1 * sizeof(float));
    
    似乎看似简单,这告诉我,我可能会遗漏一些东西。

2 个答案:

答案 0 :(得分:2)

如果ptr是空指针,则该函数的行为类似于malloc,指定一个大小字节的新块并返回指向其开头的指针。

void * realloc (void* ptr, size_t size);

ptr - 指向先前使用malloc,calloc或 realloc 分配的内存块的指针。       或者,这可以是空指针,在这种情况下,分配一个新块(就好像       malloc被称为。)

sizeNew - 内存块的大小,以字节为单位。 size_t是无符号整数类型。

sizeNew必须定义你想要的整个内存,可能更小,可能更大!

答案 1 :(得分:1)

  1. 是的,您还可以减少内存空间
  2. 不,为什么?它将void *作为第一个参数并返回void *
  3. 是的,但不需要施放!
  4. 最后,你必须告诉总内存sizeto函数。