一个诡异的struct内引用set的问题

kenwu1985 2010-12-24 02:42:31

struct Test {
set<int> *s;
};
void test(Test *t);

int main() {
Test *t = (Test*) malloc(sizeof(Test));
if (t->s) {
set<int> s = *t->s;
s.insert(1);
s.insert(2);
} else {
set<int> ss;
ss.insert(1);
ss.insert(2);
ss.insert(3);
ss.insert(4);
ss.insert(5);
ss.insert(6);
ss.insert(7);
ss.insert(8);
ss.insert(9);
ss.insert(10);
t->s = &ss;
}
test(t);
}

void test(Test *t) {
set<int> s = *(t->s); // 挂在这里
set<int>::iterator si;
for (si = s.begin(); si != s.end(); si++) {
printf("%d\n", *si);
}
}

只要ss里放入的数据一多,到test函数的 *t->s那里就挂掉了。
...全文
74 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzjwx 2010-12-24
  • 打赏
  • 举报
回复
对了 可不可以给我分呀
我分好少 而且问题好多
hzjwx 2010-12-24
  • 打赏
  • 举报
回复
#include <set>
#include <iostream>
using namespace std;

struct Test {
set<int> *s;
};
void test(Test *t);

int main() {
Test *t=NULL;
set<int> ss;
if (t) {
set<int> s = *t->s;
s.insert(1);
s.insert(2);
} else {
ss.insert(1);
ss.insert(2);
ss.insert(3);
ss.insert(4);
ss.insert(5);
ss.insert(6);
ss.insert(7);
ss.insert(8);
ss.insert(9);
ss.insert(10);
t= (Test*) malloc(sizeof(Test)+sizeof(ss));
t->s=&ss;
}

test(t);
}

void test(Test *t) {
set<int> s = *(t->s); // 挂在这里
set<int>::iterator si;
for (si = s.begin(); si != s.end(); si++) {
printf("%d\n", *si);
}
}
我帮你改了 下 ,现在可以了
hzjwx 2010-12-24
  • 打赏
  • 举报
回复
我觉得 可能是因为你的malloc的原因。
Test *t = (Test*) malloc(sizeof(Test));
有没有调试过 sizeof(Test);的值是多少?

是不是因为开始 对于struct 那个set是一个空的集合
所以sizeof(struct) 并不是一个定值
它是和 set的大小有关的?

而你插入大量数据时,你给他的空间却是前面那个很小的 值
这样内存肯定不足了
我也不是很确定
kenwu1985 2010-12-24
  • 打赏
  • 举报
回复
我的不是 Set<int*> s,是Set<int> *s。指向set的指针。不是set指向int指针。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]

Test *t = (Test*) malloc(sizeof(Test)); 这么大的错误...
改成
Test *t = new Test;
[/Quote]
呃看错了,这个不影响。。
  • 打赏
  • 举报
回复
Test *t = (Test*) malloc(sizeof(Test)); 这么大的错误...
改成
Test *t = new Test;
dieyingao 2010-12-24
  • 打赏
  • 举报
回复
你Test里面的Set<int*> s 没有初使化- -

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧