C++ malloc()和realloc()之间有什么区别?
假设我有两个用于创建10个元素的整数数组的代码示例:C++ malloc()和realloc()之间有什么区别?,c++,c,memory-management,malloc,realloc,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)); 现在,我的问题是:第一类转让是合法的,但没有使用。为什么? 它们之间有什么区别呢?注意:等价的调用是realloc(pi,10*sizeof(int)) realloc文档说明,在您的特定情况下,调
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()相同
注意:等效调用是
realloc(pi,10*sizeof(int))
realloc文档说明,在您的特定情况下,调用与malloc相同:
如果ptr为NULL,则realloc()与针对大小字节调用malloc()相同
realloc
可以扩展、缩小或不更改分配的内存段。根据实现的不同,它可能比分配新块、复制旧内容(可能是部分内容)和删除旧内容更有效
除此之外,空指针上的
realloc
应该具有与malloc
完全相同的结果和性能,realloc可以扩展、缩小或不更改分配的内存段。根据实现的不同,它可能比分配新块、复制旧内容(可能是部分内容)和删除旧内容更有效
除此之外,空指针上的realloc
应该具有与malloc
完全相同的结果和性能,realloc()
函数希望它的第一个参数是以前调用malloc()
获得的指针。它分配一个新的内存块并释放以前分配的内存块
如果将NULL
传递给realloc()
它的行为方式与malloc()
相同realloc()
函数希望它的第一个参数是以前调用malloc()
获得的指针。它分配一个新的内存块并释放以前分配的内存块
如果将
NULL
传递给realloc()
它的行为方式与malloc()
相同0x000
不是操作系统的基址,而是整数0
,编译器将其转换为空指针。因此,第一段代码与以下代码相同:
int *pi = realloc(NULL,10);
它的效果与
int *pi = malloc(10);
请注意,由于缺少sizeof(int)
,它与第二个示例不同
在这种情况下,人们通常不使用
realloc
的原因很简单,因为malloc
可以完美地完成这项工作。0x000
不是操作系统的基址,而是整数0
,编译器会将其转换为空指针。因此,第一段代码与以下代码相同:
int *pi = realloc(NULL,10);
它的效果与
int *pi = malloc(10);
请注意,由于缺少sizeof(int)
,它与第二个示例不同
在这种情况下,人们通常不使用
realloc
的原因很简单,就是malloc
可以完美地完成这项工作。首先,它并不具体。有趣的是,它似乎非常接近于上述问题的精确副本,看起来像是复制的!首先,它并不具体。有趣的是,它似乎非常接近于上述问题的精确副本,看起来像是复制的!您不能在指针上第一次使用realloc。首先创建一个指针,然后可以使用内存地址分配它。不能在指针上第一次使用realloc。首先创建一个指针,然后可以使用内存地址分配它。