找不到当前函数的边界(Code::Blocks)C++

Cannot find bounds of current function (Code::Blocks) C++

我使用的是最新版本的Code::Blocks。我有一个传入字符串和向量的函数。该函数编译没有错误。但是,当我 运行 调试器时,它立即将我带到第 118 行(我已经注意到)并给我带来麻烦。出现的错误显示 "Cannot find bounds of current function"。

这是函数,它接受一行变量声明的代码(如"var c=0"),并获取它的变量并将其值添加到向量v,一个结构体int valuestring name:

char get_variable_declaration(string line, vector<variable> &v)
{
    string b;
    variable t;
    char d[0];
    int counter = 0;
    int a;
    for (int i = 0; i<line.size(); i++) {
        if (line[i] == 'r' && counter != 1) {
           b[0] = line [i+2];
           counter ++;
        }
        if (line[i] == '=') {
            b[1]=line[i+1];
        }
    }
    t.name = b[0];
    d[0] = b[1];
    a = atoi (d);
    t.value = a;
    v.push_back (t);
    return b[0];

    //This function will take in a line of code
    //that is confirmed to have a variable declaration
    //it will add the variable to the list of
    //vectors
}

调用时间如下:

bool read_code(string file_name, vector<funct> &my_functions, vector<variable> & v)
{
    vector<string> code;
    string s;
    std::size_t found;
    bool flag;
    funct new_function;

    ifstream in;
    in.open(file_name.c_str());
    if(in.is_open())
    {
        //read in file line by line and put it into a vector called code
        while(in.peek()!=EOF)
        {
            getline(in,s);
            code.push_back(s);
        }
        in.clear();
        in.close();

        //read through each line of the code, determine if it's a variable or function (definition or call)
        //here it makes reference to functions (listed following this one) which will actually decompose the line
        //for information
        for(int i=0;i<code.size();i++)
        {
            //check if it's a variable declaration
            found = code[i].find("var");
            if(found!=std::string::npos)    //its a variable declaration
                get_variable_declaration(code[i], v); //ERROR CANNOT FIND..

            //check if it's a function. it'll go in the list of functions
            found = code[i].find("funct");
            if (found!=std::string::npos)   //that means it's a function
            {
                new_function.funct_name=get_function_name(code[i]);
                new_function.commands.clear();
                i+=2;   //skip over the open curly brace
                flag=false;
                while(!flag)
                {
                    found = code[i].find("}");
                    if(found==std::string::npos)
                    {
                        new_function.commands.push_back(code[i]);
                        i++;
                    }
                    else
                    {
                        my_functions.push_back(new_function);
                        flag=true;
                    }
                }
            }
        }

        return true;
    }
    else
    {
        cout << "Cannot locate this file" << endl;
        return false;
    }
}

免责声明:是的,这是一项家庭作业。不,我不是在寻找任何人来为我完成这项任务。但是,我仍然是编码方面的新手,需要一些帮助,所以我问你是否知道发生了什么,请帮助我解决这个问题。谢谢!

编辑:我已经让这个在另一个编译器上工作 w/o 我正在阅读的文本文件。不确定这是一个普遍问题,还是其他编译器没有发现的问题。

这部分代码存在多个问题:

string b;

for (int i = 0; i<line.size(); i++) {
    if (line[i] == 'r' && counter != 1) {
       b[0] = line [i+2];
       counter ++;
    }
    if (line[i] == '=') {
        b[1]=line[i+1];
    }
}

问题:

  • 如果 line 中的最后一个字符是 'r',可能会出现未定义的行为。

  • 如果 line 中倒数第二个字符是 'r',可能会出现未定义的行为。

  • 如果 line 中的最后一个字符是 '=',则会发生未定义的行为。

  • b[0]b[1] 的赋值都是未定义的行为。 b 字符串为空。

评论中还提到了其他未定义行为的实例,我不会重复。

我发现了问题。要正确使用 atoi,您不能使用字符串或字符数组中的特定字符。如果你声明了一个 char a[3],并且你想使用 atoi,你必须像 int value = atoi(a) 而不是 value = atoi(a[2]) 那样使用它。如果不这样做,会导致运行时错误。