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
的流。除此之外,代码风格比我从许多初学者那里看到的要好得多!请问你在哪里学习?一本书?学校/大学/学院的老师?你几乎不需要指向向量的指针。