代码崩溃并显示矢量下标超出范围。我不知道
为什么代码会崩溃,这是什么错误!!!
消息告诉你一切。
由于您无权访问veclist.at(4),它会崩溃。只是veclist 中没有足够的元素或veclist 为空。
执行(tokenize(str,","));后通过veclist.size()检查veclist中的数字元素
编辑:
您可能有不同的问题然后报告。 stol 函数可能不喜欢您的 str 令牌。这可能会导致崩溃。
考虑这个测试程序。我写了tokenize_split,应该和你的一致。
#include <vector>
#include <string>
#include <string.h>
#include <sstream>
#include<iostream>
using namespace std;
std::vector<std::string> tokenize_split(const std::string &s, char delim) {
std::stringstream ss(s);
std::string item;
std::vector<string> tokens;
while (getline(ss, item, delim)) {
tokens.push_back(item);
}
return tokens;
}
int main(void)
{
std::string str1="1 2 3 4 5 6";
std::string str2="1,2,3, 4 , 0.00000 , "; // Your string
std::string str3="1,2,3,4,5,6";
vector<string> veclist;
long num;
veclist = tokenize_split(str3, ',');
std::cout << "Size= " << veclist.size() << endl;
std::cout << "Token= " << "<" << veclist.at(4) << ">" << endl;
num = std::stol(veclist.at(4));
std::cout << "Number " << num << endl << endl;
veclist = tokenize_split(str2, ',');
std::cout << "Size= " << veclist.size() << endl;
std::cout << "Token= " << "<" << veclist.at(4) << ">" << endl;
num = std::stol(veclist.at(4));
std::cout << "Number " << num << endl << endl;
veclist = tokenize_split(str1, ' ');
std::cout << "Size= " << veclist.size() << endl;
std::cout << "Token= " << "<" << veclist.at(4) << ">" << endl;
num = std::stol(veclist.at(4));
std::cout << "Number " << num << endl << endl;
veclist = tokenize_split(str2, ' ');
std::cout << "Size= " << veclist.size() << endl;
std::cout << "Token= " << "<" << veclist.at(4) << ">" << endl;
num = std::stol(veclist.at(4));
std::cout << "Number " << num << endl;
return 0;
}
测试:
Size= 6
Token= <5>
Number 5
Size= 6
Token= < 0.00000 >
Number 0
Size= 6
Token= <5>
Number 5
Size= 5
Token= <,>
terminate called after throwing an instance of 'std::invalid_argument'
what(): stol
Aborted
程序崩溃,因为您的字符串str2 不包含可以通过stol 函数成功转换为long 的有效数字。令牌',' 将导致中止。