1

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

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

另一个是正常写的,即:

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

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

4

4 回答 4

5

注意:等效调用是realloc(pi, 10 * sizeof(int))

realloc 文档解释说,在您的特定情况下,调用与 malloc 相同:

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

于 2013-10-17T07:10:27.393 回答
3

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

除此之外,reallocover null 指针应该具有与malloc.

于 2013-10-17T07:10:35.943 回答
2

0x000不是操作系统的基地址,而是整数0,编译器会将其转换为空指针。所以第一段代码是一样的:

int *pi = realloc(NULL,10);

它具有相同的效果

int *pi = malloc(10);

请注意,由于缺少sizeof(int).

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

于 2013-10-17T07:12:42.797 回答
1

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

如果你传递NULLrealloc()它,它的行为方式与malloc().

于 2013-10-17T07:12:21.030 回答