C++ C++;cin分段故障11

C++ C++;cin分段故障11,c++,segmentation-fault,cin,C++,Segmentation Fault,Cin,代码是: std::string fname; std::cin >> fname; 当代码位于main函数中时,一切正常。 但当我把这两行放在一个成员函数中时,我得到了一个分段错误atruntime 有人能告诉我发生了什么事吗 最简单的例子: #include <iostream> #include <fstream> #include <vector> #include <string> class TextQuery { pri

代码是:

std::string fname;
std::cin >> fname;
当代码位于
main
函数中时,一切正常。 但当我把这两行放在一个成员函数中时,我得到了一个分段错误atruntime

有人能告诉我发生了什么事吗

最简单的例子:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
class TextQuery {
private:
    std::vector<std::string> *lines_of_text;
public:
    void retrieve_text();
};

void TextQuery::retrieve_text() {
    std::cout<<"Please input file name:\n";
    std::string fname;
    std::cin >> fname;
    std::ifstream fcontent(fname.c_str(), std::ios::in);
    std::string text_line;
    while(getline(fcontent, text_line, '\n')) {
        lines_of_text->push_back(text_line);
    }
}


int main() {
    TextQuery tq;
    tq.retrieve_text();
    return 0;
}
#包括
#包括
#包括
#包括
类文本查询{
私人:
std::向量*文本的行;
公众:
void retrieve_text();
};
void TextQuery::检索_text(){
std::cout fname;
std::ifstream fcontent(fname.c_str(),std::ios::in);
std::字符串文本_行;
while(getline(fcontent,text_行,'\n')){
文本的行->向后推(文本行);
}
}
int main(){
文本查询;
tq.retrieve_text();
返回0;
}

我在MacOS上使用g++4.2.1。

您声明了一个成员指针,但没有分配对象

std::vector<std::string> *lines_of_text;
std::向量*文本的行;
但是你为什么要用指针呢?您可以将其声明为成员对象

std::vector<std::string> lines_of_text;
std::文本的向量行;

请提供完整的示例,以便我们重现问题,并查看您可能对指针所做的操作(SEGFULTS的常见原因)。在您当前的问题中,没有足够的上下文来猜测问题可能是什么。@BoBTFish最简单的例子如上所述。
std::vector*lines\u of_text
是未分配的点。如果是小点,您现在不需要使用
c_str()
来打开文件流。过去是这样,但从2011年起,您可以打开一个文件名为
std::string
的流。除此之外,代码风格比我从许多初学者那里看到的要好得多!请问你在哪里学习?一本书?学校/大学/学院的老师?你几乎不需要指向向量的指针。