如何解决尝试在循环中动态初始化3维向量时遇到分段错误
我正在创建一个称为points_in_clusters的vector
vector<vector<vector<string>>> points_in_clusters =
{
{{"a","b","c"},{"q","w","e"}},//points which belongs to cluster "0"
{{"f","k","l"},{"a",{"f","l"}} //belongs to cluster "1"
};
问题是我无法动态地循环执行此操作,因为出现此错误: 分段错误(核心已转储)$ {command}
这是主要功能:
int main(int argc,char *argv[])
{
char fileName[] = "points.csv";
int k = 2;
/*****read_initial_clusters*****/
vector<vector<vector<string>>> points_in_clusters;
for(int numCluster = 0 ; numCluster < k ; ++numCluster){
read_initial_clusters(k,fileName,step,numCluster,points_in_clusters);
}
return 0
}
这是read_initial_clusters函数:
void read_initial_clusters(int k,string fileName,int step,int numCluster,vector<vector<vector<string>>>& points_in_clusters ){
int numCommas = 0;
string line;
ifstream myfile(fileName,ios::in);
vector<string> point;
if(!myfile.is_open()){
cout<<"Failed to open"<<endl;
exit(0);
}
int start_line = numCluster * step;
int end_line = start_line + step;
int myShare = 0;
int line_counter = 0;
while (getline(myfile,line))
{
if( myShare <= step)
{
if(start_line <= line_counter && line_counter < end_line)
{
myShare++;
stringstream sline(line);
string word;
while (getline(sline,word,','))
{
point.push_back(word);
numCommas++;
}
**points_in_clusters[numCluster].push_back(point);**//------->Source of error
point.clear();
line_counter++;
}
else
{
line_counter++;
}
}
else
{
myfile.close();
}
}//While
}
问题是,如果我首先用一些混乱的声音(考虑到第一维的数量)初始化我的points_in_clusters,那么“ read_initial_clusters函数”中的push_back会正常工作,但是如果没有,我会收到此段错误消息。另一方面,唯一可以预先确定的是我的第一维数,即簇数,其余的必须动态填充。
有什么办法解决这个问题?
解决方法
您的向量为空,只需更改此
for(int numCluster = 0 ; numCluster < k ; ++numCluster){
read_initial_clusters(k,fileName,step,numCluster,points_in_clusters);
}
对此
for(int numCluster = 0 ; numCluster < k ; ++numCluster){
points_in_clusters.push_back({});
read_initial_clusters(k,points_in_clusters);
}
看起来您在正确处理其他尺寸,但是还需要在第一个尺寸上push_back
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。