malloc()和realloc()有什么区别?

时间:2013-10-17 07:06:04

标签: c++ c memory-management malloc realloc

假设我有两个代码示例用于创建10个元素的整数数组:

 int *pi = (int*) 0x000; //base ADDRESS of OS
    realloc(pi,10);

另一个是正常写的,即:

int *pi;
pi=(int*) malloc(10*sizeof(int));

现在,我的问题是:第一种类型的转让是合法的,但没有使用。为什么? 它们之间有什么区别?

4 个答案:

答案 0 :(得分:5)

注意:等效呼叫为realloc(pi, 10 * sizeof(int))

realloc doc解释说,在特定情况下,调用与malloc相同:

  

如果ptr为NULL,则realloc()与对malloc()的大小字节的调用相同。

答案 1 :(得分:3)

realloc可以扩展,缩小或不更改已分配的内存段。根据实现情况,它可能比分配新块和复制旧内容(可能是部分内容)和删除旧内容更有效。

除此之外,realloc超过空指针应具有与malloc完全相同的结果和性能。

答案 2 :(得分:2)

0x000不是OS的基地址,它是整数0,编译器会将其转换为空指针。所以第一段代码与:

相同
int *pi = realloc(NULL,10);

它具有相同的效果

int *pi = malloc(10);

请注意,由于缺少sizeof(int),它与您的第二个示例不同。

在这种情况下,人们通常不使用realloc的原因只是malloc可以完美地完成工作。

答案 3 :(得分:1)

realloc()函数希望它的第一个参数是一个指针,它是通过以前发出的malloc()调用获得的。它分配一个新的内存块并释放以前分配的内存块。

如果您将NULL传递给realloc(),其行为与malloc()相同。