假设我有两个代码示例用于创建一个包含 10 个元素的整数数组:
int *pi = (int*) 0x000; //base ADDRESS of OS
realloc(pi,10);
另一个是正常写的,即:
int *pi;
pi=(int*) malloc(10*sizeof(int));
现在,我的问题是:第一种类型的赋值是合法的,但没有使用。为什么?它们之间有什么区别?
假设我有两个代码示例用于创建一个包含 10 个元素的整数数组:
int *pi = (int*) 0x000; //base ADDRESS of OS
realloc(pi,10);
另一个是正常写的,即:
int *pi;
pi=(int*) malloc(10*sizeof(int));
现在,我的问题是:第一种类型的赋值是合法的,但没有使用。为什么?它们之间有什么区别?
注意:等效调用是realloc(pi, 10 * sizeof(int))
realloc 文档解释说,在您的特定情况下,调用与 malloc 相同:
如果 ptr 为 NULL,则 realloc() 与对 malloc() 的 size 字节调用相同。
realloc
可以扩展、收缩或不更改分配的内存段。根据实现,它可能比分配新块和复制旧内容(可能是部分内容)和删除旧内容更有效。
除此之外,realloc
over null 指针应该具有与malloc
.
0x000
不是操作系统的基地址,而是整数0
,编译器会将其转换为空指针。所以第一段代码是一样的:
int *pi = realloc(NULL,10);
它具有相同的效果
int *pi = malloc(10);
请注意,由于缺少sizeof(int)
.
人们通常不会realloc
在这种情况下使用的原因很简单,它malloc
可以完美地完成工作。
该realloc()
函数希望它的第一个参数是一个指针,该指针是通过以前发出的对malloc()
. 它分配一个新的内存块并释放以前分配的内存块。
如果你传递NULL
给realloc()
它,它的行为方式与malloc()
.