gpt4 book ai didi

C++ - 在映射或 vector 中插入时出现段错误

转载 作者:行者123 更新时间:2023-11-28 07:08:42 25 4
gpt4 key购买 nike

所以我将一堆值插入到一个 vector 中(我尝试了一个具有相同结果的 map )并且我的第二个 vector VectorMin 一直出现段错误。我试着取消注释,如果我只使用 VectorMax,一切都会很好。

出于某种原因,如果我尝试操作两个 vector ,我将遇到段错误。如果我取消注释其中任何一个,程序就会正确加载。

我使用的是一个 3.5mb 的文件,其中包含 1000 行,每行有 362 个值。

std::vector<float> vectorMax, vectorMin;

void Parser::isMaxMinVector(float value, int index){

//if the index of the vector is not yet used
if (index >= vectorMax.size()){
vectorMax.push_back(value);
}

if(index >= vectorMin.size()){
vectorMin.push_back(value);
}

//if new vector is larger, then overwrite it
//if(vectorMax[index] > value) vectorMax[index] = value;
//if(vectorMin[index] < value) vectorMin[index] = value;
}


void Parser::parseLine(char* line){
std::vector<float> vectors;
char* point;

char* tk1 = strtok(line, ",");
char* tk2 = strtok(NULL, ",");

int i=0;

if(tk1 == NULL || tk2 == NULL) return;

float x = strtof(tk1, NULL);
float y = strtof(tk2, NULL);

XYPair pair = XYPair(x, y);
isMaxXY(x,y);

while(point=strtok(NULL, ",")){
//convert the token to float
float f_point = strtof(point, NULL);
//push the float to the vector
vectors.push_back(f_point);
isMaxMinVector(f_point, i);
i++;
}
}

最佳答案

您多次更改帖子的代码。不过这个代码片段

if (index >= vectorMax.size()){
vectorMax[index] = value;
}

无效,因为您使用了索引 >= size() 的不存在的元素。我想你的意思是

if ( !vectorMax.empty() && index < vectorMax.size()){
vectorMax[index] = value;
}

或者应用成员函数resize。例如

if (index >= vectorMax.size()){
vectorMax.resize( index + 1 );
vectorMax[index] = value;
}

关于C++ - 在映射或 vector 中插入时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com