C语言中,怎么用realloc函数缩小已经分配的内存空间呢?比如说:int *p=(int *)m

供稿:hz-xin.com     日期:2025-01-15
c语言,使用realloc为什么函数改变了原来内存中的数据……

正常情况应当不变,但是:
(1)realloc重新分配内存大小时有可能搬动存储块的地址,如果你到老地址去查数值,有可能变了,要用变量名字去查数值。
(2)realloc重新分配内存大小时,如果是减少存储单元(realloc既可用来增加单元,也可以用来减少单元),那么减去的那部分的 数据可能没了。
(3) realloc重新分配内存大小时,应检查分配成功了还是失败了。
int count;
int* numbers = NULL;
int* more_numbers = NULL;
....
// count 一次一次变化,重新分配
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) // 应检查分配成功了还是失败了
{
numbers=more_numbers;
}
else { // 失败了
free (numbers);
puts ("Error (re)allocating memory");
exit(0);
}
失败了,就难说了。

void *realloc(void *p,size_t size)
realloc函数将p指向的对象的长度修改为size个字节,如果新分配的内存比原来的大,则原来的数据保持不变,增加的空间不进行初始化。
如果新分配的内存比原来的内存小,则新的内存空间不被初始化,realloc函数返回指向新分配空间的指针,若无法满足要求则返回NULL 指针,在这种情况下,原指针p指向的单元内容保持不变。

扩展资料:
使用总结
1、ealloc失败的时候,返回NULL
2、realloc失败的时候,原来的内存不改变,不会释放也不会移动
3、假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址。
假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,realloc返回新内存的地址。
参考资料来源:百度百科-realloc

int* p=(int*)malloc(15*sizeof(int));

p=(int*)realloc(p, 10*sizeof(int)); //重新分配空间

关于realloc的用法
realloc 原型:extern void *realloc(void *mem_address, unsigned int newsize);功能:改变mem_address所指内存区域的大小为newsize长度。说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。注意:这里原始内存中的数据还是保持不变的...

C语言:动态内存管理:realloc扩容(缩容)函数详解
为了更好地理解realloc函数的使用,这里提供了一个简单的示例代码。在实际应用中,遵循realloc函数的使用规则,可以有效地管理和优化内存资源。值得注意的是,realloc函数在处理空指针时的行为类似于`malloc`函数。例如,`realloc(NULL, 40)`等同于`malloc(40)`。综上所述,realloc函数为C语言开发者提供了...

C语言中如何动态增加内存空间
动态增加内存空间 可以用 realloc 函数。函数原型是。void* realloc (void* ptr, size_t size);例如,你第一次用 malloc 函数 动态分配了空间,随着一步步运算,觉得空间不够,需要加大空间,与此同时,原先空间里的数据需保留并还要继续使用,这时需要用 realloc,它能满足此需要。下面是完整的程序...

reallocC语言函数realloc
在C语言中,realloc函数是一个重要的内存管理工具,其原型定义为:extern void *realloc(void *mem_address, unsigned int newsize);。该函数的主要作用是根据新的大小动态调整内存块,确保内存的连续性。在使用时,需要包含头文件#include ,在某些编译器中,如TC2.0,可能还需使用#include 或#include...

C语言realloc函数小问题
特别注意的是,当size值与当前内存大小相同时,realloc()仅会检查是否有足够的内存空间。若可用内存不足,可能会导致程序崩溃或产生未定义行为。因此,在使用realloc()调整内存块大小时,务必确保有足够的内存资源。总之,realloc()是C语言中调整内存块大小的重要函数。通过合理利用realloc(),程序员可以更...

【零基础学C语言】内存知识总结:realloc函数和free函数
内存管理总结:realloc与free函数realloc函数是C语言中用于调整内存分配大小的重要工具。它在内存分配后,可以根据需要增加或减少内存空间,保持或复制原有数据。函数原型如下:如果内存空间足够,realloc会扩展现有内存,返回原指针并保持数据完整性。若空间不足,会先释放旧内存,再按新需求重新分配,可能需要...

reallocrealloc使用总结
在使用realloc函数时,如果分配内存失败,它会返回NULL,这时原来的内存区域不会有任何改变,既不会被释放也不会移动。值得注意的是,realloc的行为取决于剩余内存情况。如果原来的内存后面有足够的空间,realloc会直接扩展内存,新分配的内存等于原内存加上剩余空间,此时返回的还是原来的内存地址。反之,若...

remalloc()函数怎么用,有什么要注意的
p=OPENSSL_realloc(p,32);for(i=0;i<32;i++)memset(&p[i],i,1);\/* realloc时将以前的内存区清除(置乱) *\/ p=OPENSSL_realloc_clean(p,32,77);p=OPENSSL_remalloc(p,40);OPENSSL_malloc_locked(3);OPENSSL_free(p);return 0;} 上述示例使用了基本的openssl内存分配和释放函数。OPENSS...

C语言里realloc( p, 20)是增加20个,还是增加到20个
原型:extern void realloc(void ptr,size_t newsize);用法:#include <stdlib.h> 功能:改变ptr所指内存区域的大小为newsize长度。说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。示例:include <stdio.h> include <stdlib.h...

一维数组 的长度
相比之下,动态一维数组则通过指针实现,它在运行时分配内存。这种类型的数组可以使用realloc函数来调整其长度。首先,定义一个指向整数的指针int *p;,然后使用malloc函数分配初始内存,如p = malloc(10 * sizeof(int));分配10个整数的空间。当需要扩展数组长度时,可以使用realloc函数,如p = realloc(...