找不到当前函数的边界(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 value
和 string 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])
那样使用它。如果不这样做,会导致运行时错误。
我使用的是最新版本的Code::Blocks。我有一个传入字符串和向量的函数。该函数编译没有错误。但是,当我 运行 调试器时,它立即将我带到第 118 行(我已经注意到)并给我带来麻烦。出现的错误显示 "Cannot find bounds of current function"。
这是函数,它接受一行变量声明的代码(如"var c=0"),并获取它的变量并将其值添加到向量v,一个结构体int value
和 string 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])
那样使用它。如果不这样做,会导致运行时错误。