免费注册 查看新帖 |

Chinaunix

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

[C++] 类成员变量太大程序会down???? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-18 14:27 |只看该作者 |倒序浏览
不知道C++对类成员变量的大小有没有限制;如下程序,我在一个类里面定义了比较大的成员变量作为索引,这个索引是个数组。当数组的空间太大的时候,程序在构造这个类的时候就会corwdown,不知道大家有没有见过这个问题。要是有这样问题的话该如何解决

typedef struct
{
    time_t MaxTimeStamp;
&nbsp;&nbsp;&nbsp;&nbsp;vector<string> ThridIndex;
}SECOND_INDEX_NODE;

typedef struct
{
&nbsp;&nbsp;&nbsp;&nbsp;u_int32_t nCollisionTimes; &nbsp;&nbsp;&nbsp;&nbsp;map<string,SECOND_INDEX_NODE> SecondIndex;
}FIRST_INDEX_NODE;

class TEST
{
.................
FIRST_INDEX_NODE m_FirstIndex[100000];
.................
}


程序一开起来,运行到构造函数时就down了。我如果把m_FirstIndex的大小缩小10倍就没有事,奇怪了。难道对象的成员有大小限制吗

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2009-08-18 14:37 |只看该作者

回复 #1 jiangf 的帖子

是不是声明了一个TEST的自动变量?

计算一下:
typedef struct
{
    time_t MaxTimeStamp;
    vector<string> ThridIndex;
}SECOND_INDEX_NODE;

这个至少应该有12字节。

class TEST
{
.................
FIRST_INDEX_NODE m_FirstIndex[100000];
.................
};
这个, 就至少100000×12字节 = 1M多字节了。

win32下一般默认栈大小就只有1M。

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
3 [报告]
发表于 2009-08-18 14:38 |只看该作者

回复 #1 jiangf 的帖子

先将大小缩小10倍
然后创建一个对象,sizeof试试

说句实话,你的对象也太占内存了,还是用动态内存分配

论坛徽章:
0
4 [报告]
发表于 2009-08-18 14:41 |只看该作者

回复 #1 jiangf 的帖子

同意二楼,应该是栈大小的限制。而不是类的限制。

[ 本帖最后由 ddkkd 于 2009-8-18 14:42 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-08-19 14:44 |只看该作者
我把这个成员变量改成动态开辟。构造函数通过了,可是往里面插数据时就报错了,到
pIndex[0].mapValue.insert(make_pair(1,"Pather1"));时就报错
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map>
#include <vector>
using namespace std;

typedef struct
{
&nbsp;&nbsp;&nbsp;&nbsp;int nCollisionTimes;
&nbsp;&nbsp;&nbsp;&nbsp;map<int,string> mapValue;
}FIRST_INDEX_NODE;

typedef map<int,string>::iterator P_MAP;

int main()
{
&nbsp;&nbsp;&nbsp;&nbsp;FIRST_INDEX_NODE *pIndex = (FIRST_INDEX_NODE *)malloc(10*sizeof(FIRST_INDEX_NODE));
&nbsp;&nbsp;&nbsp;&nbsp;pIndex[0].mapValue.insert(make_pair(1,"Pather1"));
&nbsp;&nbsp;&nbsp;&nbsp;free(pIndex);
}

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2009-08-19 14:55 |只看该作者

回复 #5 jiangf 的帖子

原帖由 jiangf 于 2009-8-19 14:44 发表
    FIRST_INDEX_NODE *pIndex = (FIRST_INDEX_NODE *)malloc(10*sizeof(FIRST_INDEX_NODE));
    pIndex[0].mapValue.insert(make_pair(1,"Pather1 "));
    free(pIndex);


大哥你是不是故意来找茬的~~~ 说!

论坛徽章:
0
7 [报告]
发表于 2009-08-19 14:58 |只看该作者
为什么这样说呢,确实遇到问题了嘛。

论坛徽章:
0
8 [报告]
发表于 2009-08-19 15:00 |只看该作者
楼上的同志有什么好办法呢解决这个问题呢

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
9 [报告]
发表于 2009-08-19 15:03 |只看该作者

回复 #7 jiangf 的帖子

FIRST_INDEX_NODE *pIndex = new FIRST_INDEX_NODE[10];
pIndex[0].mapValue.insert(make_pair(1,"Pather1"));
delete [] pIndex;

论坛徽章:
0
10 [报告]
发表于 2009-08-19 16:52 |只看该作者
他这里用malloc 和 free 为什么不行?又不是类,按理也可以的,都是在堆上分配空间
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP