Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ malloc()和realloc()之间有什么区别?_C++_C_Memory Management_Malloc_Realloc - Fatal编程技术网

C++ malloc()和realloc()之间有什么区别?

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文档说明,在您的特定情况下,调

假设我有两个用于创建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()相同


注意:等效调用是
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。首先创建一个指针,然后可以使用内存地址分配它。