首页 > 解决方案 > 字符串声明中的分段

问题描述

运行程序时出现分段错误,该程序是使用 -g 标记使用 g++ 编译的。然后我使用 gdb 调试程序:

源代码提取(clinicFunctions.cpp):

void loadTreatments(string &file, string treatments[20], int &treatmentsCount){

cout << "---LOADING TREATMENTS---" << endl;

ifstream reader(file.c_str());
int lineCounter = 1;



if(!reader){
    cerr << "**Error opening file: " << file << "**" << endl;
}

while (reader){
    string line;  //LINE 299, ERROR OCCURS HERE
    int stringLength;
    size_t location;
    char extraction[20];
    size_t length;

    string treatment;

    getline(reader, line);
    stringLength = line.length();
    location = line.find(".");

gdb 结果:

Program received signal SIGSEGV, Segmentation fault.
0x77923654 in ?? ()
(gdb) backtrace
#0  0x77923654 in ?? ()
#1  0x775e70b5 in msvcrt!free () from C:\windows\SysWOW64\msvcrt.dll
#2  0x00990000 in ?? ()
#3  0x6fe5a624 in ?? () from C:\MinGW\bin\libstdc++-6.dll
#4  0x6fec971f in ?? () from C:\MinGW\bin\libstdc++-6.dll
#5  0x6fed6353 in ?? () from C:\MinGW\bin\libstdc++-6.dll
#6  0x6fed63a1 in ?? () from C:\MinGW\bin\libstdc++-6.dll
#7  0x6feda29b in ?? () from C:\MinGW\bin\libstdc++-6.dll
#8  0x00402fb1 in _fu22___ZSt4cerr () at clinicFunctions.cpp:299
#9  0x00401643 in main (argc=5, argv=0x990ea0) at clinic.cpp:48

这个错误发生在第三个循环while (reader)

标签: c++segmentation-fault

解决方案


推荐阅读