
realloc 的空间比原始空间小时,保存的数据会发生改变么?
realloc一个比malloc分配还小新的空间时,新的空间中数值还是原来的值么?下面先分配了100个int空间,初始化并realloc后缩小到20,那20个int空间保...
realloc 一个比malloc 分配还小新的空间时,新的空间中数值还是原来的值么?
下面先分配了100 个int 空间,初始化并realloc 后缩小到20,那20 个int 空间保存的还是开始初始化的值么?
#include "stdlib.h"
#include "stdio.h"
main(){
int *p1;
int i;
p1 = (int *)malloc(100*sizeof(int));
for(i = 0; i < 100; ++i){
p1[i] = i;
}
printf("PT:%u\n",p1);
p1 = (int *)realloc(p1, 20*sizeof(int));
for(i = 0; i < 20; ++i){
printf("%d\t",p1[i]);
}
printf("\nPT:%u\n",p1);
free(p1);
}
答案是的,而且指针的位置也没有发生改变,
realloc 就有这个特性么?新分配的空间比原来的小时,指针就还是原始指针么? 展开
下面先分配了100 个int 空间,初始化并realloc 后缩小到20,那20 个int 空间保存的还是开始初始化的值么?
#include "stdlib.h"
#include "stdio.h"
main(){
int *p1;
int i;
p1 = (int *)malloc(100*sizeof(int));
for(i = 0; i < 100; ++i){
p1[i] = i;
}
printf("PT:%u\n",p1);
p1 = (int *)realloc(p1, 20*sizeof(int));
for(i = 0; i < 20; ++i){
printf("%d\t",p1[i]);
}
printf("\nPT:%u\n",p1);
free(p1);
}
答案是的,而且指针的位置也没有发生改变,
realloc 就有这个特性么?新分配的空间比原来的小时,指针就还是原始指针么? 展开
8个回答
展开全部
指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
新的大小一定要大于原来的大小,不然的话会导致数据丢失!
先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
新的大小一定要大于原来的大小,不然的话会导致数据丢失!
先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个应该不会,空间变小,数据不会变化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针有可能不是原来的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询