当前位置: 技术问答>linux和unix
在linux下使用realloc,但是报错glibc detected xxx realloc(): invalid old size:0x000000000196e4c0
来源: 互联网 发布时间:2016-05-25
本文导语: 我在AS5下,内核2.6.18-53.el5,使用语句是 a=(TYPE *)realloc(b,somesize); if(b!=a && a!=NULL) { return a; } return b; 当程序进行一段其他调用再次使用上面程序语句就出glibc detected xxx realloc(): invalid old size:0x000000000196e4c0问题.我在...
我在AS5下,内核2.6.18-53.el5,使用语句是
a=(TYPE *)realloc(b,somesize);
if(b!=a && a!=NULL)
{
return a;
}
return b;
当程序进行一段其他调用再次使用上面程序语句就出glibc detected xxx realloc(): invalid old size:0x000000000196e4c0问题.我在网上查过,但是好像有的说是因为释放了内存会出这个问题,但是我的程序中没有任何地方调用free函数,请问这是为什么呢
a=(TYPE *)realloc(b,somesize);
if(b!=a && a!=NULL)
{
return a;
}
return b;
当程序进行一段其他调用再次使用上面程序语句就出glibc detected xxx realloc(): invalid old size:0x000000000196e4c0问题.我在网上查过,但是好像有的说是因为释放了内存会出这个问题,但是我的程序中没有任何地方调用free函数,请问这是为什么呢
|
個人感覺,realloc()的行為太“雜”了,建議別用它
當想擴大內存的時候,可以重新的malloc()了一塊大的出來,然後把舊的內容copy到新的內存塊中,這樣的方案
應該要不realloc()安全得多!
當想擴大內存的時候,可以重新的malloc()了一塊大的出來,然後把舊的內容copy到新的內存塊中,這樣的方案
應該要不realloc()安全得多!
|
同意楼上
通常这样的用法应该不会出现问题
TYPE * p = (TYPE *)malloc(sizeof(TYPE)*5);
//TYPE * p2 = p;
p = (TYPE *)realloc(p, sizeof(TYPE)*10);
即只对一个指针引用的内存处理
但要注意了,现在的p2已经不一定有效了
realloc的具体反应还是查帮助看一下吧,加深理解
通常这样的用法应该不会出现问题
TYPE * p = (TYPE *)malloc(sizeof(TYPE)*5);
//TYPE * p2 = p;
p = (TYPE *)realloc(p, sizeof(TYPE)*10);
即只对一个指针引用的内存处理
但要注意了,现在的p2已经不一定有效了
realloc的具体反应还是查帮助看一下吧,加深理解
|
那可能是b原来为NULL或没有分配过内存,使用realloc是会free原来的指针的。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。