int *ptr;
...
realloc(ptr,++count*sizeof(int));
or
ptr=realloc(ptr,++count*sizeof(int));
我注意到如果我多次使用选项号一,第一个内存地址的值(ptr
指向),变为未定义(尽管内存块中的所有其他值都很好并且可以通过下标访问ptr
).
但是,我假设所有 realloc 所做的都是缩小或增加内存块的大小,并且ptr
仍会指向同一个内存块,并且它的任何值都不会改变。因此,如果我使用选项一,为什么内存块中的第一个地址最终会得到一个意外的值,因为没有ptr
仍然指向同一个地址?
EDIT:
我确实记得给 ptr 分配内存,只是不认为它有用。
返回的指针realloc
可以不可以指向与传递给它的指针相同的地址。
通常,如果您要扩展内存块,则可能没有足够的空间来将其扩展到位。在这种情况下realloc
分配一个新的内存块,将旧对象的内容复制到新分配的块中,并返回指向新块的指针。如果您不将结果分配给指针对象,那么您就丢失了它(旧块被释放,并且您不知道新块在哪里)。
realloc
甚至可以返回指向新分配的内存块的指针,如果shrinks分配的块。可能有充分的理由从不同的内存区域分配较小的块。
您还需要注意的是realloc
可能会失败。如果是,它返回一个空指针——并且旧指针仍然有效(只是没有指向您想要的大小的内存块)。 (原则,realloc
即使新大小小于旧大小,也可能会失败。)因此,除非您对分配失败的响应是中止程序,或者至少中止使用指针的部分,否则您应该将结果分配给不同的指针对象:
int *ptr = ...;
int *new_ptr;
new_ptr = realloc(ptr, new_size);
if (new_ptr == NULL) {
/* ptr still points to the old block of memory; you can try something else */
}
else {
ptr = new_ptr; /* Now you can forget the old pointer value */
}
If realloc
成功,它返回的指针值是有效的,而你传递给它的指针是无效的。
If realloc
失败,它返回一个空指针,并且你传递给它的指针仍然有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)