免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3603 | 回复: 7
打印 上一主题 下一主题

[C++] new 也会报错? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-23 21:12 |只看该作者 |倒序浏览
  1. Program received signal SIGSEGV, Segmentation fault.
  2. malloc_consolidate (av=av@entry=0x7ffff7322c00 <main_arena>) at malloc.c:4134
  3. 4134        malloc.c: 没有那个文件或目录.
  4. (gdb) bt
  5. #0  malloc_consolidate (av=av@entry=0x7ffff7322c00 <main_arena>) at malloc.c:4134
  6. #1  0x00007ffff6ffc584 in _int_malloc (av=av@entry=0x7ffff7322c00 <main_arena>,
  7.     bytes=bytes@entry=1488) at malloc.c:3417
  8. #2  0x00007ffff6ffe99e in __GI___libc_malloc (bytes=1488) at malloc.c:2895
  9. #3  0x00007ffff78d0ae8 in operator new(unsigned long) ()
  10.    from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
  11. #4  0x00000000004018ae in CUDPSend::AllocItem (this=this@entry=0x604640 <CTSend>)
  12.     at server/src/UDP.cpp:281
复制代码
  1. typedef struct _UDP_ITEM_
  2. {
  3.         unsigned short                        uBufLen;               //chBuf的数据长度
  4.         unsigned short                        uLimitCnt;             //发送次数限制
  5.         int                                        hSock;                 //UDP句柄
  6. }UDP_ITEM;
复制代码
281行是 pItem = new UDP_ITEM();

前几次不会报错,我是循环几万次就报了这个错误

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
2 [报告]
发表于 2016-03-23 21:25 |只看该作者
地址空间耗尽吧
估计是32bit,你可以再试试64 bits

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2016-03-23 21:32 |只看该作者
流氓无产者 发表于 2016-03-23 21:25
地址空间耗尽吧
估计是32bit,你可以再试试64 bits
我系统是64位的linux

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2016-03-24 14:25 |只看该作者
new申请失败抛异常

论坛徽章:
0
5 [报告]
发表于 2016-03-24 14:39 |只看该作者
一般局部变量越界引起的,比如你分配了x内存,但写的超出了x,再new的时候从使用的内存上分配的,而这段内存正好在使用...
不过,不管怎么样,内存不够用时new是不会出错的,因为会从虚拟内存继续分配。
希望有帮助。如果对自己分配的内存没信心的话,可以参考libevnt里面的evbuffer系统函数。
还有些开源的内存池,比如tcmalloc

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2016-03-25 18:00 |只看该作者
谢谢楼上,应该是其他地方越界造成的,因为我16G内存使用不到10%,怎么可能内存耗尽呢?

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
7 [报告]
发表于 2016-03-25 23:18 |只看该作者
谢谢楼上,应该是其他地方越界造成的,因为我16G内存使用不到10%,怎么可能内存耗尽呢?

论坛徽章:
0
8 [报告]
发表于 2016-03-26 10:29 |只看该作者
回复 3# jd808

看 异常分析是系统 malloc 有问题,长期下去不满足你分配的要求。

1: 你换个操作系统看看,比如Win7试试,也许能断定是系统的malloc或内存分配回收有问题
2: 你强制 编译成32bit  或结构体强制对齐试试,看看多少万次失败,若是尝试我等你的回复
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP