我正在做作业,我遇到了一个奇怪的问题,希望有人能帮我解决。我的代码中间有一个函数:
Token scheme::addScheme(vector <Token> toAdd)
{
//Check if scheme is valid
Token answer = isSchemeValid(toAdd);
if (answer.retType() != "ok")
{
return answer;
}
identifierList * arrow = new identifierList(&(toAdd.at(0)), NULL);
idList = arrow;
for (int i = 2; i < toAdd.size()-1; i++)
{
(*arrow).id = &(toAdd.at(i));
(*arrow).next= new identifierList(&(toAdd.at(0)), NULL);
arrow = (*arrow).next;
}
*id = toAdd.at(0);
openParen = '(';
closeParen = ')';
return Token("ok", "ok", 0);
}
这段代码做了我需要做的所有事情,除了最后。它正确地将所有变量设置为我需要的变量。这是它不起作用的地方:我一步一步运行它,在运行最后一行 return Token("ok", "ok", 0); idList 的值从合法值变为疯狂值(例如,idList 行号中的第一个 id 从 2 变为 -17891602。
如果我发布标识符列表和令牌包含的标题,这可能更有意义:令牌:#pragma once using namespace std; #include #include #include #include #include "datalogProgram.h"
enum state {COMMA, PERIOD, Q_MARK, LEFT_PAREN, RIGHT_PAREN, COLON, COLON_DASH, MULTIPLY, ADD, SCHEMES, FACTS, RULES, QUERIES, ID, STRING, COMMENT, WHITESPACE, UNDEFINED, ENDOFFILE, START};
class Token
{
friend class datalogProgram;
public:
int lineNumber;
string type;
string value;
Token(string inType, string inValue, int inLineNum);
void route(state inState, string inValue, int inLineNum);
string retType();
string retValue();
//A list of a bunch of functions that don't matter here.
};
还有一个标识符列表:
class identifierList
{
friend class scheme;
public:
Token * id;
identifierList * next;
identifierList(Token * inId, identifierList * inNext);
};
我不明白 - 当我所做的只是从函数返回时,为什么任何变量都会发生变化?