2014-03-02 73 views
0

我对C相当陌生,刚刚开始冒险进入动态分配数组领域。realloc vs malloc in C

我想我已经得到了大部分malloc下来,但对realloc一些问题:

  1. realloc用于别的除了增加内存空间的指针?
  2. 尺寸变量是否必须是int
  3. 会像下面的工作?

    float *L = NULL; 
    
    int task_count = 5; 
    
    L = (float*) realloc (L, task_count * sizeof(float)); 
    

如果我想进一步增加的空间(一个在这种情况下),可能我只是用类似如下的?

L = (float*) realloc (L, 1 * sizeof(float)); 

似乎看似简单,它告诉我我可能错过了一些东西。

+1

不,realloc需要告诉你想要的总大小。如果你想增加1,你需要重新分配(在你的情况下)6.还要注意,'realloc'可能会失败,所以你应该先将它的结果分配给一个临时指针,检查成功,然后将它分配给源指针。 – Joe

+0

好吧,故事的士气,我用malloc创建大小我的初始块,然后我可以只使用realloc,但需要特定的我+任何大小增加我需要? – user3287789

+0

另外,感谢您指出故障部分。不太明白为什么他们在[cpp参考页](http://www.cplusplus.com/reference/cstdlib/realloc/)中分配另一个指针。感谢您指出这一点 – user3287789

回答

1
  1. 是的,你也可以减少存储空间
  2. 不,为什么?它需要void *作为第一个参数并返回void *
  3. 是的,但不需要投!

最后,你必须告诉总内存sizeto的功能。

2

如果ptr是一个空指针,该函数的行为就像malloc,分配一个新的字节大小的块并返回一个指向其开始的指针。

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

PTR - 指向存储块先前使用malloc,释放calloc或realloc的分配。 或者,这可以是一个空指针,在这种情况下分配一个新块(就像调用malloc一样)。

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

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