realloc比较奇怪,是真的扩展,还是重新分配了内存空间?下面代码怎么运行报错?

JCC0128 2005-05-19 05:17:25
void main()
{
int a[] = {1,2,3,4} ;
int* p ;
p = (int*)realloc(a , 7*sizeof(int)) ;

p[6] = 9 ;
printf("%d",p[6]) ;
}
...全文
140 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cppprogramlover 2005-05-21
  • 打赏
  • 举报
回复
realloc 应该是重新分配内存,并释放原来的内存,否则无法保证分配的内存是连续的。


先查看 以前free的空间又没有后面接着的,如果有,合并两块,剩余的话重新做成一块以便下次malloc用
如果 free的内存没有了,向操作系统申请一块。
sungengyu 2005-05-19
  • 打赏
  • 举报
回复
realloc 应该是重新分配内存,并释放原来的内存,否则无法保证分配的内存是连续的。
popcom 2005-05-19
  • 打赏
  • 举报
回复
学习
liubingqian 2005-05-19
  • 打赏
  • 举报
回复
楼上说的对。
realloc和malloc都是在堆上分配内存。而数组并不是在堆上的。
Eastunfail 2005-05-19
  • 打赏
  • 举报
回复
传给realloc的第一个参数必须是指向一个由crt的堆上由calloc,malloc,realloc动态分配的内存

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧