C语言:不考虑中间插入与删除的话,用realloc可否替代链表操作? 20
注:考虑到对空指针realloc等于malloc,所以这里不提malloc。我最初考虑使用链表是因为初始空间分配量不确定,而在runtime中动态分配;但目前看来我用re...
注:考虑到对空指针realloc等于malloc,所以这里不提malloc。
我最初考虑使用链表是因为初始空间分配量不确定,而在runtime中动态分配;但目前看来我用realloc也可以实现它。由于我的程序并不需要中间插值或删除,而仅是顺序访问和最终的一次性释放。我选用realloc去实现。这样做是否相较链表操作会节省创建与遍历的时间(因为我这样等于是数组操作)?另外我这样用有什么弊端吗? 展开
我最初考虑使用链表是因为初始空间分配量不确定,而在runtime中动态分配;但目前看来我用realloc也可以实现它。由于我的程序并不需要中间插值或删除,而仅是顺序访问和最终的一次性释放。我选用realloc去实现。这样做是否相较链表操作会节省创建与遍历的时间(因为我这样等于是数组操作)?另外我这样用有什么弊端吗? 展开
1个回答
展开全部
最好还是不要这样,realloc是从堆上分配内存的.当扩大一块内存空间时,realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;如果数据后面的字节不够,问题就出来了,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上.这句话传递的一个重要的信息就是数据可能被移动.
追问
但是返回的指针应该是除了分配的空间扩大了(我这里暂时只考虑扩大),内容也带的吧?我的意思是说:就算挪动,但如果内容不变,毕竟新地址返回回来了,我只要把原指针变量的值赋成新的不是一样用吗?
当然,如果内容有丢失那就糟了。但你认为内容有丢失的可能吗?
追答
不好说,系统分配的内存,内存不足的话就会出现问题。realloc可以对给定的指针所指的空间进行扩大或者缩小,无论是扩张或是缩小,原有内存的中内容将保持不变.当然,对于缩小,则被缩小的那一部分的内容会丢失.realloc并不保证调整后的内存空间和原来的内存空间保持同一内存地址.相反,realloc返回的指针很可能指向一个新的地址.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询