更新时间:2023-09-17 16:02:14
大家好,我是小环,我来为大家解答以上问题。reallocated sector count警告,realloc很多人还不知道,现在让我们一起来看看吧!
1、LZ理解有误。
2、对于realloc而言,它负责重新分配给定指针指向的由malloc等动态方式获得的内存空间,而不是仅仅是新申请空间然后复制原内容。
3、从设计目的来说,旧的空间如果需要被释放,过程和结果应该是安全的,因此一个典型的简单实现中realloc内部成功地新申请空间、复制原内存空间中的数据后,会把原来那一片内存free掉(这样以前的内容也确实丢了,但更进一步,由于通过free归还给了系统,用指针指回这片空间是无意义的),于是这里就不用事先q = pn了,用了一般也是错的(这取决于realloc的实现,如果新分配内存比较小或者之后有连续的空闲空间可供扩大原来被分配的内存块,理论上可以不另外申请新空间进行复制,而在原地取某一偏移量直接进行free,此时realloc返回的指针和原指针相等)。
4、 当realloc分配失败返回NULL时,原指针指向的内容不变,这样pn=(int *)realloc(pn,10*sizeof(int))确实不妥,会使pn的原值丢失,从而使pn在realloc之前指向的内存发生泄漏。
5、用LZ的q = pn备份原指针之后再检查pn在realloc后是否为NULL可以解决问题,也可以这样: int *q = realloc(pn,10*sizeof(int)); if(q != NULL) pn = q; 和LZ的方法不同的是,这里pn始终是有效的,在手动释放前不会是NULL。
6、 ==== [原创回答团]。
本文到此讲解完毕了,希望对大家有帮助。