请教 “返回数组指针” 和“数组指针赋值” 的问题

lee_ray 2007-04-24 06:37:58
std::string* getSiteType(){
std::string *_type = new std::string[2];
int j = 0;
//Langure的定义是std::map<std::string, std::vector<FromTo *> > *Langure 并且已经初始化的, 肯定有值
for(std::map<std::string, std::vector<FromTo *> >::iterator i = Langure->begin(); i != Langure->end(); ++i){
_type[j] = i->first; //这里赋值有问题, 会出现“断错误”
j++;
}
return _type;
}

void Create(GtkWidget *vbox)
{
std::string *_Type = getSiteType();
int _typeSize = _Type->size();
int i = 0;
while(i < _typeSize){
std::string *a = _Type[i]; //这里不知道怎么把数组的元素挨个读出来
printf("111111111%s", a.c_str());
i++;
}
}

谢谢大家。
...全文
300 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2007-04-25
  • 打赏
  • 举报
回复
std::string *_Type = getSiteType();
int _typeSize = _Type->size();
这个size()可不是数组里string的个数,是第一个string的长度。
要么用vector<string>
要么返回pair<string *, int>同时返回地址和长度
lee_ray 2007-04-24
  • 打赏
  • 举报
回复
struct FromTo{
std::string from;
std::string to;
};

std::map<std::string, std::vector<FromTo *> > *Langure;

void setFulltext(){
std::vector<FromTo *> fromto;
FromTo *ft0 = new FromTo();
ft0->from = "English";
ft0->to = "Chinese(Simplified)";
fromto.push_back(ft0);
FromTo *ft1 = new FromTo();
ft1->from = "English";
ft1->to = "Chinese(Traditional)";
fromto.push_back(ft1);
FromTo *ft2 = new FromTo();
ft2->from = "Chinese";
ft2->to = "German";
fromto.push_back(ft2);
FromTo *ft3 = new FromTo();
ft3->from = "Chinese";
ft3->to = "English";
fromto.push_back(ft3);
FromTo *ft4 = new FromTo();
ft4->from = "English";
ft4->to = "Japanese";
fromto.push_back(ft4);
std::string from0 = "Google";
Langure->insert(make_pair(from0, fromto));

std::vector<FromTo *> fromto1;
FromTo *ft5 = new FromTo();
ft5->from = "English";
ft5->to = "Chinese(Simplified)";
fromto1.push_back(ft5);
FromTo *ft7 = new FromTo();
ft7->from = "English";
ft7->to = "Chinese(Traditional)";
fromto1.push_back(ft7);
FromTo *ft6 = new FromTo();
ft6->from = "Chinese";
ft6->to = "German";
fromto1.push_back(ft6);
FromTo *ft8 = new FromTo();
ft8->from = "Chinese";
ft8->to = "English";
fromto1.push_back(ft8);
FromTo *ft9 = new FromTo();
ft9->from = "English";
ft9->to = "Japanese";
fromto1.push_back(ft9);
std::string from1 = "Yahoo";
Langure->insert(make_pair(from1, fromto1));
}


这里, Langure->insert时出现 “断错误”
lee_ray 2007-04-24
  • 打赏
  • 举报
回复
保证不是越界错误。
int _L = Langure->size();
std::string *_type = new std::string[_L];
我这样写了, 也是断错误

还有就是我怎么把数组的元素挨个读出来
xlbdan 2007-04-24
  • 打赏
  • 举报
回复
估计是越界错误
jixingzhong 2007-04-24
  • 打赏
  • 举报
回复
首先确定一下 Langure 中的元素个数,
int len=Langure.count();
std::string *_type = new std::string[len]; //申请足够的空间 ~
jixingzhong 2007-04-24
  • 打赏
  • 举报
回复
std::string *_type = new std::string[2];
for(std::map<std::string, std::vector<FromTo *> >::iterator i = Langure->begin(); i != Langure->end(); ++i){
_type[j] = i->first; //这里赋值有问题, 会出现“断错误”
j++; //j ++ ,j都到几了? std::string *_type = new std::string[2];只有两个string.....
}

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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