0

运行此代码时出现内存问题:

#include <iomanip>
#include <string>
#include <iostream>
#include <vector>

using namespace std;

int main(){
        vector<string> tokens;
        int x,y;
        string toParse = "word,more words,an int 5,some more,this is the 5th one,thisll be 6,seven,eight,nine,tenth,extra";
        for(y=0; y<10; y++){
            cout << "in for loop " << y << endl;
            x = toParse.find(",");
            tokens[y]= toParse.substr(0,x);
            toParse = toParse.substr(x+1);
        }
        for(y=0; y<9; y++)
            cout << tokens[y] << endl;
}

本质上,我只想存储值,根据逗号分隔。

x 应该设置为逗号的位置,我在该位置上存储信息,包括直到逗号。然后,我使用 substr 获取一个新字符串以从中获取位,并在逗号后取整行。我得到一个分段错误。

4

3 回答 3

1

这是因为您使用tokens[y]的向量中没有足够的项目。您需要tokens.push_back(...)改用,或用十项声明向量:

std::vector<std::string> tokens(10);
于 2013-09-16T17:01:49.340 回答
1
vector<string> tokens;

这声明了令牌向量,具有默认大小 (0)。然后,您使用operator[]而不是push_backor向其中添加项目emplace_back,因此它正在访问未分配的内存。您要么需要调整数组的大小:

tokens.resize(10);

或使用push_back/emplace_back进行插入:

tokens.push_back(toParse.substr(0, x));
于 2013-09-16T17:06:23.523 回答
1

替换tokens[y]=toParse.substr(0, x)

tokens.push_back(toParse.substr(0, x));

 for(y=0; y<10; y++){
        cout << "in for loop " << y << endl;
        x = toParse.find(",");
        tokens.push_back(toParse.substr(0,x));
        toParse = toParse.substr(x+1);
    }
    for(y=0; y<9; y++)
        cout << tokens[y] << endl;
于 2013-09-16T17:06:33.597 回答